
<!DOCTYPE HTML>
<html lang="zh-hans" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>APP优化 · Aivin开发笔记</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        <meta name="author" content="Aivin">
        
        
    
    <link rel="stylesheet" href="../../gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-search-plus/search.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-anchor-navigation-ex/style/plugin.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-fontsettings/website.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-tbfed-pagefooter/footer.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-local-video/video-js.min.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-splitter/splitter.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-theme-comscore/test.css">
                
            
        

    

    
        
        <link rel="stylesheet" href="../../styles/website.css">
        
    

        
    
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../../gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="../../gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="项目参数配置.html" />
    
    
    <link rel="prev" href="sdk开发.html" />
    

    
        <link rel="shortcut icon" href='../../assets/images/favicon.ico' type="image/x-icon">
    
    
        <link rel="bookmark" href='../../assets/images/favicon.ico' type="image/x-icon">
    
    
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="输入并搜索" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    

    

    
        
        
    
        <li class="chapter " data-level="1.1" data-path="../../">
            
                <a href="../../">
            
                    
                    首页
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" data-path="../doc/常用网站.html">
            
                <a href="../doc/常用网站.html">
            
                    
                    常用网站
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.3" data-path="../常用软件/常用软件和框架.html">
            
                <a href="../常用软件/常用软件和框架.html">
            
                    
                    常用软件和框架
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4" data-path="../doc/开发规范.html">
            
                <a href="../doc/开发规范.html">
            
                    
                    开发规范
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.5" data-path="../doc/开源软件.html">
            
                <a href="../doc/开源软件.html">
            
                    
                    开源软件和框架
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.6" data-path="../doc/Android常用代码.html">
            
                <a href="../doc/Android常用代码.html">
            
                    
                    Android常用代码
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.7" data-path="../源码阅读/源码阅读配置.html">
            
                <a href="../源码阅读/源码阅读配置.html">
            
                    
                    源码阅读
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.7.1" data-path="../源码阅读/其他框架源码.html">
            
                <a href="../源码阅读/其他框架源码.html">
            
                    
                    其他框架源码
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.8" data-path="../产品经理/产品经理.html">
            
                <a href="../产品经理/产品经理.html">
            
                    
                    产品经理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9" data-path="../设计模式/设计模式.html">
            
                <a href="../设计模式/设计模式.html">
            
                    
                    设计模式
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.9.1" data-path="../设计模式/设计模式.html">
            
                <a href="../设计模式/设计模式.html">
            
                    
                    设计模式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.2" data-path="../设计模式/模式详解.html">
            
                <a href="../设计模式/模式详解.html">
            
                    
                    模式详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.9.3" data-path="../设计模式/mvc等.html">
            
                <a href="../设计模式/mvc等.html">
            
                    
                    mvc等
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.10" data-path="../数据结构/常用数据结构.html">
            
                <a href="../数据结构/常用数据结构.html">
            
                    
                    基本算法
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.10.1" data-path="../数据结构/常用数据结构.html">
            
                <a href="../数据结构/常用数据结构.html">
            
                    
                    常用数据结构
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.2" data-path="../常用算法/算法术语.html">
            
                <a href="../常用算法/算法术语.html">
            
                    
                    算法术语
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.3" data-path="../常用算法/排序算法.html">
            
                <a href="../常用算法/排序算法.html">
            
                    
                    排序算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.4" data-path="../常用算法/查找算法.html">
            
                <a href="../常用算法/查找算法.html">
            
                    
                    查找算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.5" data-path="../常用算法/大数相加.html">
            
                <a href="../常用算法/大数相加.html">
            
                    
                    大数相加
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.6" data-path="../常用算法/集合的所有子集.html">
            
                <a href="../常用算法/集合的所有子集.html">
            
                    
                    获得集合的所有子集
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.7" data-path="../常用算法/扫描线种子填充算法.html">
            
                <a href="../常用算法/扫描线种子填充算法.html">
            
                    
                    扫描线种子填充算法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.10.8" data-path="../常用算法/其他算法.html">
            
                <a href="../常用算法/其他算法.html">
            
                    
                    其他算法
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.11" data-path="../java基础/原码补码反码.html">
            
                <a href="../java基础/原码补码反码.html">
            
                    
                    Java部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.11.1" data-path="../java基础/原码补码反码.html">
            
                <a href="../java基础/原码补码反码.html">
            
                    
                    原码补码反码
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.2" data-path="../java基础/java常用代码.html">
            
                <a href="../java基础/java常用代码.html">
            
                    
                    java常用代码
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.3" data-path="../java基础/JVM详解.html">
            
                <a href="../java基础/JVM详解.html">
            
                    
                    JVM详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.4" data-path="../java基础/类加载机制.html">
            
                <a href="../java基础/类加载机制.html">
            
                    
                    类加载机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.5" data-path="../java基础/内存模型.html">
            
                <a href="../java基础/内存模型.html">
            
                    
                    内存模型
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.6" data-path="../java基础/GC机制.html">
            
                <a href="../java基础/GC机制.html">
            
                    
                    GC机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.7" data-path="../java基础/对象内存布局.html">
            
                <a href="../java基础/对象内存布局.html">
            
                    
                    对象内存布局
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.8" data-path="../java基础/继承多态.html">
            
                <a href="../java基础/继承多态.html">
            
                    
                    继承和多态
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.9" data-path="../java基础/相等判断.html">
            
                <a href="../java基础/相等判断.html">
            
                    
                    相等判断
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.10" data-path="../java基础/Java容器类.html">
            
                <a href="../java基础/Java容器类.html">
            
                    
                    Java容器类
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.11" data-path="../java基础/Java枚举.html">
            
                <a href="../java基础/Java枚举.html">
            
                    
                    Java枚举
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.12" data-path="../java基础/自定义异常.html">
            
                <a href="../java基础/自定义异常.html">
            
                    
                    自定义异常
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.13" data-path="../java基础/深度拷贝.html">
            
                <a href="../java基础/深度拷贝.html">
            
                    
                    深度拷贝
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.14" data-path="../java基础/泛型详解.html">
            
                <a href="../java基础/泛型详解.html">
            
                    
                    泛型详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.15" data-path="../java基础/线程详解.html">
            
                <a href="../java基础/线程详解.html">
            
                    
                    线程详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.16" data-path="../java基础/java注解.html">
            
                <a href="../java基础/java注解.html">
            
                    
                    注解详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.17" data-path="../java基础/数据解析.html">
            
                <a href="../java基础/数据解析.html">
            
                    
                    数据解析
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.11.18" data-path="../java基础/java8新特性.html">
            
                <a href="../java基础/java8新特性.html">
            
                    
                    Java8新特性
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.12" data-path="android零散知识.html">
            
                <a href="android零散知识.html">
            
                    
                    Android部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.12.1" data-path="基础控件使用.html">
            
                <a href="基础控件使用.html">
            
                    
                    基础控件使用
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.2" data-path="android零散知识.html">
            
                <a href="android零散知识.html">
            
                    
                    Android零散知识
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.3" data-path="android坐标体系.html">
            
                <a href="android坐标体系.html">
            
                    
                    Android坐标体系
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.4" data-path="APP的启动流程.html">
            
                <a href="APP的启动流程.html">
            
                    
                    APP启动流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.5" data-path="View加载流程.html">
            
                <a href="View加载流程.html">
            
                    
                    View加载流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.6" data-path="事件分发机制.html">
            
                <a href="事件分发机制.html">
            
                    
                    事件分发机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.7" data-path="控件绘制流程.html">
            
                <a href="控件绘制流程.html">
            
                    
                    控件绘制流程
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.8" data-path="常用shape.html">
            
                <a href="常用shape.html">
            
                    
                    常用shape
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.9" data-path="进程通信.html">
            
                <a href="进程通信.html">
            
                    
                    进程通信
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.10" data-path="../通信方式/通信方式详解.html">
            
                <a href="../通信方式/通信方式详解.html">
            
                    
                    通信方式详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.11" data-path="Binder详解.html">
            
                <a href="Binder详解.html">
            
                    
                    Binder详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.12" data-path="Handler详解.html">
            
                <a href="Handler详解.html">
            
                    
                    Handle详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.13" data-path="Fragment详解.html">
            
                <a href="Fragment详解.html">
            
                    
                    Fragment详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.14" data-path="Activity详解.html">
            
                <a href="Activity详解.html">
            
                    
                    Activity详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.15" data-path="BroadcastReceiver.html">
            
                <a href="BroadcastReceiver.html">
            
                    
                    BroadcastReceiver详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.16" data-path="Service服务.html">
            
                <a href="Service服务.html">
            
                    
                    Service详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.17" data-path="动画详解.html">
            
                <a href="动画详解.html">
            
                    
                    动画详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.18" data-path="屏幕刷新机制.html">
            
                <a href="屏幕刷新机制.html">
            
                    
                    屏幕刷新机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.19" data-path="屏幕适配.html">
            
                <a href="屏幕适配.html">
            
                    
                    屏幕适配
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.20" data-path="图片加载详解.html">
            
                <a href="图片加载详解.html">
            
                    
                    图片加载详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.21" data-path="WebView详解.html">
            
                <a href="WebView详解.html">
            
                    
                    WebView详解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.22" data-path="沉浸式.html">
            
                <a href="沉浸式.html">
            
                    
                    沉浸式
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.23" data-path="相机模块.html">
            
                <a href="相机模块.html">
            
                    
                    相机模块
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.24" data-path="地图模块.html">
            
                <a href="地图模块.html">
            
                    
                    地图模块
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.25" data-path="Androidstudio插件开发.html">
            
                <a href="Androidstudio插件开发.html">
            
                    
                    Androidstudio插件开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.26" data-path="Apk插件化开发.html">
            
                <a href="Apk插件化开发.html">
            
                    
                    Apk插件化开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.27" data-path="App组件化开发.html">
            
                <a href="App组件化开发.html">
            
                    
                    App组件化开发
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.28" data-path="sdk开发.html">
            
                <a href="sdk开发.html">
            
                    
                    sdk开发
            
                </a>
            

            
        </li>
    
        <li class="chapter active" data-level="1.12.29" data-path="APP优化.html">
            
                <a href="APP优化.html">
            
                    
                    APP优化
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.30" data-path="项目参数配置.html">
            
                <a href="项目参数配置.html">
            
                    
                    项目参数配置
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.31" data-path="App发布.html">
            
                <a href="App发布.html">
            
                    
                    App发布
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.32" data-path="Android外挂.html">
            
                <a href="Android外挂.html">
            
                    
                    Android外挂
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.33" data-path="Android字节码插桩.html">
            
                <a href="Android字节码插桩.html">
            
                    
                    Android字节码插桩
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.12.34" data-path="智能家居.html">
            
                <a href="智能家居.html">
            
                    
                    智能家居
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.13" data-path="../python/python基础.html">
            
                <a href="../python/python基础.html">
            
                    
                    python部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.13.1" data-path="../python/python基础.html">
            
                <a href="../python/python基础.html">
            
                    
                    python基础
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.13.2" data-path="../python/python爬虫.html">
            
                <a href="../python/python爬虫.html">
            
                    
                    python爬虫
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.14" data-path="../gradle/Groovy.html">
            
                <a href="../gradle/Groovy.html">
            
                    
                    Groovy
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.15" data-path="../kotlin/kotlin部分.html">
            
                <a href="../kotlin/kotlin部分.html">
            
                    
                    kotlin部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.16" data-path="../flutter/flutter部分.html">
            
                <a href="../flutter/flutter部分.html">
            
                    
                    flutter部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17" data-path="../native/ccpp.html">
            
                <a href="../native/ccpp.html">
            
                    
                    native部分
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.17.1" data-path="../native/Linux.html">
            
                <a href="../native/Linux.html">
            
                    
                    Linux
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.2" data-path="../native/ccpp.html">
            
                <a href="../native/ccpp.html">
            
                    
                    cCpp
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.3" data-path="../native/NDK.html">
            
                <a href="../native/NDK.html">
            
                    
                    NDK
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.4" data-path="../native/系统编译剪裁.html">
            
                <a href="../native/系统编译剪裁.html">
            
                    
                    系统编译剪裁
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.5" data-path="../native/音视频.html">
            
                <a href="../native/音视频.html">
            
                    
                    音视频
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.6" data-path="../native/音视频第三方库.html">
            
                <a href="../native/音视频第三方库.html">
            
                    
                    音视频第三方库
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.17.7" data-path="../native/相关代码.html">
            
                <a href="../native/相关代码.html">
            
                    
                    相关代码
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.18" data-path="../server/服务器部分.html">
            
                <a href="../server/服务器部分.html">
            
                    
                    服务器部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.19" data-path="../webDev/web部分.html">
            
                <a href="../webDev/web部分.html">
            
                    
                    web部分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.20" data-path="../人工智能/人工智能相关概念.html">
            
                <a href="../人工智能/人工智能相关概念.html">
            
                    
                    人工智能
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.21" data-path="../面试真题/极飞.html">
            
                <a href="../面试真题/极飞.html">
            
                    
                    面试真题
            
                </a>
            

            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            本书使用 GitBook 发布
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href="../.." >APP优化</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div class="search-plus" id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <div id="anchor-navigation-ex-navbar"><i class="fa fa-navicon"></i><ul><li><span class="title-icon "></span><a href="#app-&#x4F18;&#x5316;--apm"><b>1. </b>App &#x4F18;&#x5316; , APM</a></li><li><span class="title-icon "></span><a href="#&#x7ED8;&#x5236;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><b>2. </b>&#x7ED8;&#x5236;&#x4F18;&#x5316; &#xFF08;&#x5B8C;&#x6210;&#xFF09;</a></li><ul><li><span class="title-icon "></span><a href="#&#x7ED8;&#x5236;&#x7C7B;&#x578B;"><b>2.1. </b>&#x7ED8;&#x5236;&#x7C7B;&#x578B;</a></li></ul><li><span class="title-icon "></span><a href="#&#x5E03;&#x5C40;&#x4F18;&#x5316;--&#x5B8C;&#x6210;"><b>3. </b>&#x5E03;&#x5C40;&#x4F18;&#x5316;  (&#x5B8C;&#x6210;)</a></li><ul><li><span class="title-icon "></span><a href="#&#x5361;&#x987F;&#x5206;&#x6790;&#x5DE5;&#x5177;-systrace-&#xFF0C;&#x67E5;&#x770B;&#x8017;&#x65F6;&#x6389;&#x5E27;"><b>3.1. </b>&#x5361;&#x987F;&#x5206;&#x6790;&#x5DE5;&#x5177; Systrace &#xFF0C;&#x67E5;&#x770B;&#x8017;&#x65F6;/&#x6389;&#x5E27;</a></li><li><span class="title-icon "></span><a href="#&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x5E38;&#x89C4;&#x65B9;&#x6848;"><b>3.2. </b>&#x5E03;&#x5C40;&#x4F18;&#x5316; &#x5E38;&#x89C4;&#x65B9;&#x6848;</a></li><ul><li><span class="title-icon "></span><a href="#&#x51CF;&#x5C11;&#x5C42;&#x7EA7;"><b>3.2.1. </b>&#x51CF;&#x5C11;&#x5C42;&#x7EA7;</a></li><li><span class="title-icon "></span><a href="#&#x5E03;&#x5C40;&#x590D;&#x7528;"><b>3.2.2. </b>&#x5E03;&#x5C40;&#x590D;&#x7528;</a></li><li><span class="title-icon "></span><a href="#&#x5408;&#x7406;&#x7684;&#x5237;&#x65B0;&#x673A;&#x5236;"><b>3.2.3. </b>&#x5408;&#x7406;&#x7684;&#x5237;&#x65B0;&#x673A;&#x5236;</a></li></ul><li><span class="title-icon "></span><a href="#&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x7B2C;&#x4E09;&#x65B9;&#x6846;&#x67B6;&#x65B9;&#x6848;"><b>3.3. </b>&#x5E03;&#x5C40;&#x4F18;&#x5316; &#x7B2C;&#x4E09;&#x65B9;&#x6846;&#x67B6;&#x65B9;&#x6848;</a></li><li><span class="title-icon "></span><a href="#&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x7528;&#x5230;&#x4E86;&#x54EA;&#x4E9B;&#x5DE5;&#x5177;"><b>3.4. </b>&#x5E03;&#x5C40;&#x4F18;&#x5316; &#x7528;&#x5230;&#x4E86;&#x54EA;&#x4E9B;&#x5DE5;&#x5177;</a></li><li><span class="title-icon "></span><a href="#&#x5E03;&#x5C40;&#x4E3A;&#x4EC0;&#x4E48;&#x53EF;&#x80FD;&#x4F1A;&#x5361;&#x987F;&#xFF0C;&#x4F60;&#x53C8;&#x662F;&#x5982;&#x4F55;&#x4F18;&#x5316;&#x7684;&#xFF1F;"><b>3.5. </b>&#x5E03;&#x5C40;&#x4E3A;&#x4EC0;&#x4E48;&#x53EF;&#x80FD;&#x4F1A;&#x5361;&#x987F;&#xFF0C;&#x4F60;&#x53C8;&#x662F;&#x5982;&#x4F55;&#x4F18;&#x5316;&#x7684;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#&#x505A;&#x5B8C;&#x5E03;&#x5C40;&#x4F18;&#x5316;&#x6709;&#x54EA;&#x4E9B;&#x6210;&#x679C;&#x4EA7;&#x51FA;&#xFF1F;"><b>3.6. </b>&#x505A;&#x5B8C;&#x5E03;&#x5C40;&#x4F18;&#x5316;&#x6709;&#x54EA;&#x4E9B;&#x6210;&#x679C;&#x4EA7;&#x51FA;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#merge-&#x6807;&#x7B7E;"><b>3.7. </b>merge &#x6807;&#x7B7E;</a></li></ul><li><span class="title-icon "></span><a href="#&#x5361;&#x987F;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><b>4. </b>&#x5361;&#x987F;&#x4F18;&#x5316; &#xFF08;&#x5B8C;&#x6210;&#xFF09;</a></li><ul><li><span class="title-icon "></span><a href="#ui&#x6D41;&#x7545;&#x5EA6;&#x4F18;&#x5316;-&#x3001;&#x754C;&#x9762;&#x5361;&#x987F;-&#x6392;&#x67E5;&#x53CA;&#x4F18;&#x5316;"><b>4.1. </b>UI&#x6D41;&#x7545;&#x5EA6;&#x4F18;&#x5316; &#x3001;&#x754C;&#x9762;&#x5361;&#x987F; &#x6392;&#x67E5;&#x53CA;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x5361;&#x987F;&#x5F15;&#x8D77;&#x7684;&#x5177;&#x4F53;&#x539F;&#x56E0;"><b>4.2. </b>&#x5361;&#x987F;&#x5F15;&#x8D77;&#x7684;&#x5177;&#x4F53;&#x539F;&#x56E0;</a></li><li><span class="title-icon "></span><a href="#&#x5361;&#x987F;&#x68C0;&#x6D4B;-choreographer"><b>4.3. </b>&#x5361;&#x987F;&#x68C0;&#x6D4B; Choreographer</a></li><li><span class="title-icon "></span><a href="#&#x6392;&#x67E5;-&#x7EBF;&#x4E0A;app-&#x7528;&#x6237;&#x53CD;&#x9988;&#x5361;&#x987F;&#x7684;&#x95EE;&#x9898;"><b>4.4. </b>&#x6392;&#x67E5; &#x7EBF;&#x4E0A;App ,&#x7528;&#x6237;&#x53CD;&#x9988;&#x5361;&#x987F;&#x7684;&#x95EE;&#x9898;</a></li></ul><li><span class="title-icon "></span><a href="#&#x542F;&#x52A8;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><b>5. </b>&#x542F;&#x52A8;&#x4F18;&#x5316; &#xFF08;&#x5B8C;&#x6210;&#xFF09;</a></li><ul><li><span class="title-icon "></span><a href="#&#x542F;&#x52A8;&#x5361;&#x987F;&#x5E38;&#x89C1;&#x73B0;&#x8C61;"><b>5.1. </b>&#x542F;&#x52A8;&#x5361;&#x987F;&#x5E38;&#x89C1;&#x73B0;&#x8C61;</a></li><li><span class="title-icon "></span><a href="#&#x67E5;&#x770B;-app-&#x542F;&#x52A8;&#x8017;&#x65F6;"><b>5.2. </b>&#x67E5;&#x770B; APP &#x542F;&#x52A8;&#x8017;&#x65F6;</a></li><li><span class="title-icon "></span><a href="#&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x5206;&#x6790;&#x5DE5;&#x5177;-&#x2014;-traceview"><b>5.3. </b>&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x5206;&#x6790;&#x5DE5;&#x5177; &#x2014; TraceView</a></li><li><span class="title-icon "></span><a href="#&#x51B7;&#x542F;&#x52A8;"><b>5.4. </b>&#x51B7;&#x542F;&#x52A8;</a></li><ul><li><span class="title-icon "></span><a href="#&#x51B7;&#x542F;&#x52A8;&#x4F18;&#x5316;"><b>5.4.1. </b>&#x51B7;&#x542F;&#x52A8;&#x4F18;&#x5316;</a></li></ul><li><span class="title-icon "></span><a href="#&#x70ED;&#x542F;&#x52A8;&#x4F18;&#x5316;"><b>5.5. </b>&#x70ED;&#x542F;&#x52A8;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x6E29;&#x542F;&#x52A8;&#x4F18;&#x5316;"><b>5.6. </b>&#x6E29;&#x542F;&#x52A8;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x542F;&#x52A8;&#x4F18;&#x5316;-&#x65B9;&#x6848;&#x603B;&#x7ED3;"><b>5.7. </b>&#x542F;&#x52A8;&#x4F18;&#x5316; &#x65B9;&#x6848;&#x603B;&#x7ED3;</a></li><ul><li><span class="title-icon "></span><a href="#&#x95EA;&#x5C4F;&#x9875;&#x4F18;&#x5316;"><b>5.7.1. </b>&#x95EA;&#x5C4F;&#x9875;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x61D2;&#x52A0;&#x8F7D;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;"><b>5.7.2. </b>&#x61D2;&#x52A0;&#x8F7D;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;</a></li><li><span class="title-icon "></span><a href="#&#x5EF6;&#x8FDF;&#x521D;&#x59CB;&#x5316;"><b>5.7.3. </b>&#x5EF6;&#x8FDF;&#x521D;&#x59CB;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x5F02;&#x6B65;&#x521D;&#x59CB;&#x5316;"><b>5.7.4. </b>&#x5F02;&#x6B65;&#x521D;&#x59CB;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x5BF9;-multidex-&#x8FDB;&#x884C;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316;--&#x51CF;&#x5C11;-anr-&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x51CF;&#x5C11;&#x542F;&#x52A8;&#x901F;&#x5EA6;"><b>5.7.5. </b>&#x5BF9; Multidex &#x8FDB;&#x884C;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316; ( &#x51CF;&#x5C11; ANR &#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x51CF;&#x5C11;&#x542F;&#x52A8;&#x901F;&#x5EA6;)</a></li><li><span class="title-icon "></span><a href="#&#x7C7B;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316;&#x3001;activity-&#x9884;&#x52A0;&#x8F7D;"><b>5.7.6. </b>&#x7C7B;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316;&#x3001;Activity &#x9884;&#x52A0;&#x8F7D;</a></li><li><span class="title-icon "></span><a href="#webview-&#x542F;&#x52A8;&#x4F18;&#x5316;"><b>5.7.7. </b>WebView &#x542F;&#x52A8;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x9875;&#x9762;&#x6570;&#x636E;&#x9884;&#x52A0;&#x8F7D;"><b>5.7.8. </b>&#x9875;&#x9762;&#x6570;&#x636E;&#x9884;&#x52A0;&#x8F7D;</a></li><li><span class="title-icon "></span><a href="#&#x4E3B;&#x9875;&#x7684;&#x7ED8;&#x5236;&#x4F18;&#x5316;"><b>5.7.9. </b>&#x4E3B;&#x9875;&#x7684;&#x7ED8;&#x5236;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x542F;&#x52A8;&#x9636;&#x6BB5;&#x6291;&#x5236;gc-&#xFF08;&#x666E;&#x901A;app-&#x96BE;&#x641E;&#x3001;&#x6210;&#x672C;&#x9AD8;&#xFF0C;&#x96BE;&#x5EA6;&#x5927;&#xFF09;"><b>5.7.10. </b>&#x542F;&#x52A8;&#x9636;&#x6BB5;&#x6291;&#x5236;GC &#xFF08;&#x666E;&#x901A;APP &#x96BE;&#x641E;&#x3001;&#x6210;&#x672C;&#x9AD8;&#xFF0C;&#x96BE;&#x5EA6;&#x5927;&#xFF09;</a></li><li><span class="title-icon "></span><a href="#cpu&#x9501;&#x9891;&#xFF08;&#x666E;&#x901A;app-&#x96BE;&#x641E;&#xFF0C;&#x6CA1;&#x6743;&#x9650;&#xFF09;"><b>5.7.11. </b>CPU&#x9501;&#x9891;&#xFF08;&#x666E;&#x901A;APP &#x96BE;&#x641E;&#xFF0C;&#x6CA1;&#x6743;&#x9650;&#xFF09;</a></li><li><span class="title-icon "></span><a href="#io&#x4F18;&#x5316;"><b>5.7.12. </b>IO&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x6570;&#x636E;&#x91CD;&#x6392;"><b>5.7.13. </b>&#x6570;&#x636E;&#x91CD;&#x6392;</a></li><li><span class="title-icon "></span><a href="#1"><b>5.7.14. </b>1</a></li><li><span class="title-icon "></span><a href="#1_1"><b>5.7.15. </b>1</a></li><li><span class="title-icon "></span><a href="#1_2"><b>5.7.16. </b>1</a></li></ul></ul><li><span class="title-icon "></span><a href="#io-&#x4F18;&#x5316;--&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><b>6. </b>IO &#x4F18;&#x5316;  &#xFF08;&#x5B8C;&#x6210;&#xFF09;</a></li><ul><li><span class="title-icon "></span><a href="#io-&#x76F8;&#x5173;&#x7684;&#x6982;&#x5FF5;"><b>6.1. </b>IO &#x76F8;&#x5173;&#x7684;&#x6982;&#x5FF5;</a></li><li><span class="title-icon "></span><a href="#io-&#x6709;&#x65F6;&#x5019;&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x7A81;&#x7136;&#x5F88;&#x6162;&#xFF1F;"><b>6.2. </b>I/O &#x6709;&#x65F6;&#x5019;&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x7A81;&#x7136;&#x5F88;&#x6162;&#xFF1F;</a></li><li><span class="title-icon "></span><a href="#io-&#x6027;&#x80FD;&#x8BC4;&#x4F30;&#x6307;&#x6807;"><b>6.3. </b>I/O &#x6027;&#x80FD;&#x8BC4;&#x4F30;&#x6307;&#x6807;</a></li><li><span class="title-icon "></span><a href="#io-&#x7C7B;&#x578B;"><b>6.4. </b>io &#x7C7B;&#x578B;</a></li><li><span class="title-icon "></span><a href="#io-&#x76D1;&#x63A7;&#x5DE5;&#x5177;"><b>6.5. </b>IO &#x76D1;&#x63A7;&#x5DE5;&#x5177;</a></li><li><span class="title-icon "></span><a href="#io&#x4F18;&#x5316;&#x63AA;&#x65BD;"><b>6.6. </b>IO&#x4F18;&#x5316;&#x63AA;&#x65BD;</a></li><ul><li><span class="title-icon "></span><a href="#&#x5BF9;&#x5927;&#x6587;&#x4EF6;&#x4F7F;&#x7528;-mmap-&#x6216;&#x8005;-nio-&#x65B9;&#x5F0F;&#x3002;"><b>6.6.1. </b>&#x5BF9;&#x5927;&#x6587;&#x4EF6;&#x4F7F;&#x7528; mmap &#x6216;&#x8005; nio &#x65B9;&#x5F0F;&#x3002;</a></li><li><span class="title-icon "></span><a href="#&#x5B89;&#x88C5;&#x5305;&#x4E0D;&#x538B;&#x7F29;&#x3002;"><b>6.6.2. </b>&#x5B89;&#x88C5;&#x5305;&#x4E0D;&#x538B;&#x7F29;&#x3002;</a></li><li><span class="title-icon "></span><a href="#buffer-&#x590D;&#x7528;"><b>6.6.3. </b>Buffer &#x590D;&#x7528;</a></li><li><span class="title-icon "></span><a href="#&#x5B58;&#x50A8;&#x7ED3;&#x6784;&#x548C;&#x7B97;&#x6CD5;&#x7684;&#x4F18;&#x5316;"><b>6.6.4. </b>&#x5B58;&#x50A8;&#x7ED3;&#x6784;&#x548C;&#x7B97;&#x6CD5;&#x7684;&#x4F18;&#x5316;</a></li></ul></ul><li><span class="title-icon "></span><a href="#&#x5B58;&#x50A8;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><b>7. </b>&#x5B58;&#x50A8;&#x4F18;&#x5316; &#xFF08;&#x5B8C;&#x6210;&#xFF09;</a></li><ul><li><span class="title-icon "></span><a href="#&#x9700;&#x8981;&#x4F18;&#x5316;&#x5B58;&#x50A8;&#x7684;&#x539F;&#x56E0;"><b>7.1. </b>&#x9700;&#x8981;&#x4F18;&#x5316;&#x5B58;&#x50A8;&#x7684;&#x539F;&#x56E0;</a></li><li><span class="title-icon "></span><a href="#&#x5E38;&#x7528;&#x7684;&#x5B58;&#x50A8;&#x65B9;&#x6848;"><b>7.2. </b>&#x5E38;&#x7528;&#x7684;&#x5B58;&#x50A8;&#x65B9;&#x6848;</a></li><ul><li><span class="title-icon "></span><a href="#sharedpreferences"><b>7.2.1. </b>SharedPreferences</a></li><li><span class="title-icon "></span><a href="#contentprovider"><b>7.2.2. </b>ContentProvider</a></li><li><span class="title-icon "></span><a href="#datastore"><b>7.2.3. </b>DataStore</a></li><li><span class="title-icon "></span><a href="#mmkv"><b>7.2.4. </b>MMKV</a></li><li><span class="title-icon "></span><a href="#sqlite"><b>7.2.5. </b>SQLite</a></li><li><span class="title-icon "></span><a href="#&#x6587;&#x4EF6;&#x5B58;&#x50A8;"><b>7.2.6. </b>&#x6587;&#x4EF6;&#x5B58;&#x50A8;</a></li></ul><li><span class="title-icon "></span><a href="#&#x5B58;&#x50A8;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;"><b>7.3. </b>&#x5B58;&#x50A8;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;</a></li><ul><li><span class="title-icon "></span><a href="#&#x7A33;&#x5065;&#x6B63;&#x786E;&#x6027;&#x4F18;&#x5316;"><b>7.3.1. </b>&#x7A33;&#x5065;&#x6B63;&#x786E;&#x6027;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x5B58;&#x50A8;&#x65F6;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;"><b>7.3.2. </b>&#x5B58;&#x50A8;&#x65F6;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;"><b>7.3.3. </b>&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x5B58;&#x50A8;&#x6570;&#x636E;&#x5B89;&#x5168;&#x4F18;&#x5316;"><b>7.3.4. </b>&#x5B58;&#x50A8;&#x6570;&#x636E;&#x5B89;&#x5168;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x5B58;&#x50A8;&#x517C;&#x5BB9;&#x6027;&#x4F18;&#x5316;"><b>7.3.5. </b>&#x5B58;&#x50A8;&#x517C;&#x5BB9;&#x6027;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x5F00;&#x53D1;&#x65F6;&#x95F4;&#x6210;&#x672C;&#x4F18;&#x5316;"><b>7.3.6. </b>&#x5F00;&#x53D1;&#x65F6;&#x95F4;&#x6210;&#x672C;&#x4F18;&#x5316;</a></li></ul></ul><li><span class="title-icon "></span><a href="#&#x7F51;&#x7EDC;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><b>8. </b>&#x7F51;&#x7EDC;&#x4F18;&#x5316; &#xFF08;&#x5B8C;&#x6210;&#xFF09;</a></li><ul><li><span class="title-icon "></span><a href="#&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7684;&#x610F;&#x4E49;"><b>8.1. </b>&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7684;&#x610F;&#x4E49;</a></li><li><span class="title-icon "></span><a href="#&#x7F51;&#x7EDC;&#x6027;&#x80FD;&#x6307;&#x6807;"><b>8.2. </b>&#x7F51;&#x7EDC;&#x6027;&#x80FD;&#x6307;&#x6807;</a></li><ul><li><span class="title-icon "></span><a href="#&#x901F;&#x7387;"><b>8.2.1. </b>&#x901F;&#x7387;</a></li><li><span class="title-icon "></span><a href="#&#x65F6;&#x5EF6;"><b>8.2.2. </b>&#x65F6;&#x5EF6;</a></li><li><span class="title-icon "></span><a href="#&#x5F80;&#x8FD4;&#x65F6;&#x95F4;-rtt-&#xFF08;route-trip-time&#xFF09;"><b>8.2.3. </b>&#x5F80;&#x8FD4;&#x65F6;&#x95F4; RTT &#xFF08;Route-Trip Time&#xFF09;</a></li><li><span class="title-icon "></span><a href="#&#x5E26;&#x5BBD;"><b>8.2.4. </b>&#x5E26;&#x5BBD;</a></li></ul><li><span class="title-icon "></span><a href="#&#x7F51;&#x7EDC;&#x76D1;&#x542C;&#x4F18;&#x5316;&#x5E38;&#x7528;&#x5DE5;&#x5177;"><b>8.3. </b>&#x7F51;&#x7EDC;&#x76D1;&#x542C;&#x4F18;&#x5316;&#x5E38;&#x7528;&#x5DE5;&#x5177;</a></li><ul><li><span class="title-icon "></span><a href="#network-profiler"><b>8.3.1. </b>Network Profiler</a></li><li><span class="title-icon "></span><a href="#&#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177;--charles--&#x5C0F;&#x8336;&#x58F6;-"><b>8.3.2. </b>&#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177;  charles ( &#x5C0F;&#x8336;&#x58F6; )</a></li><li><span class="title-icon "></span><a href="#&#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177;-wireshark"><b>8.3.3. </b>&#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177; Wireshark</a></li><li><span class="title-icon "></span><a href="#linux-&#x547D;&#x4EE4;&#x5DE5;&#x5177;-tcpdump"><b>8.3.4. </b>Linux &#x547D;&#x4EE4;&#x5DE5;&#x5177; TcpDump</a></li><li><span class="title-icon "></span><a href="#facebook-&#x7684;&#x5DE5;&#x5177;-stetho"><b>8.3.5. </b>Facebook &#x7684;&#x5DE5;&#x5177; Stetho</a></li><li><span class="title-icon "></span><a href="#networkstatsmanager---android-api-"><b>8.3.6. </b>NetworkStatsManager  ( Android api )</a></li><li><span class="title-icon "></span><a href="#trafficstats--android-api-"><b>8.3.7. </b>TrafficStats ( Android api )</a></li></ul><li><span class="title-icon "></span><a href="#&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7EAC;&#x5EA6;"><b>8.4. </b>&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7EAC;&#x5EA6;</a></li><ul><li><span class="title-icon "></span><a href="#&#x9488;&#x5BF9;-&#x786C;&#x4EF6;-&#x8F6F;&#x4EF6;&#x6210;&#x672C;-&#x4F18;&#x5316;"><b>8.4.1. </b>&#x9488;&#x5BF9; &#x786C;&#x4EF6; &#x8F6F;&#x4EF6;&#x6210;&#x672C; &#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x9488;&#x5BF9;-&#x6D41;&#x91CF;&#x6D88;&#x8017;&#x76D1;&#x63A7;-&#x5E76;&#x9488;&#x5BF9;&#x4F18;&#x5316;"><b>8.4.2. </b>&#x9488;&#x5BF9; &#x6D41;&#x91CF;&#x6D88;&#x8017;&#x76D1;&#x63A7; &#x5E76;&#x9488;&#x5BF9;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x9488;&#x5BF9;-&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x8D28;&#x91CF;&#x3001;&#x6210;&#x529F;&#x7387;&#x4F18;&#x5316;"><b>8.4.3. </b>&#x9488;&#x5BF9; &#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x8D28;&#x91CF;&#x3001;&#x6210;&#x529F;&#x7387;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x7F51;&#x7EDC;&#x4FE1;&#x606F;&#x5B89;&#x5168;&#x4F18;&#x5316;"><b>8.4.4. </b>&#x7F51;&#x7EDC;&#x4FE1;&#x606F;&#x5B89;&#x5168;&#x4F18;&#x5316;</a></li></ul><li><span class="title-icon "></span><a href="#&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x529E;&#x6CD5;"><b>8.5. </b>&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x529E;&#x6CD5;</a></li><ul><li><span class="title-icon "></span><a href="#&#x642D;&#x5EFA;&#x6216;&#x8005;&#x8D2D;&#x4E70;-cnd-&#x5185;&#x5BB9;&#x5206;&#x53D1;&#x670D;&#x52A1;"><b>8.5.1. </b>&#x642D;&#x5EFA;&#x6216;&#x8005;&#x8D2D;&#x4E70; CND &#x5185;&#x5BB9;&#x5206;&#x53D1;&#x670D;&#x52A1;</a></li><li><span class="title-icon "></span><a href="#&#x8FDE;&#x63A5;&#x91CD;&#x7528;-tcp"><b>8.5.2. </b>&#x8FDE;&#x63A5;&#x91CD;&#x7528; (tcp)</a></li><li><span class="title-icon "></span><a href="#&#x4F7F;&#x7528;-tfotcp-fast-open---tcp"><b>8.5.3. </b>&#x4F7F;&#x7528; TFO(TCP Fast Open)  -(tcp)</a></li><li><span class="title-icon "></span><a href="#tcp&#x7A97;&#x53E3;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x200B;-tcp"><b>8.5.4. </b>TCP&#x7A97;&#x53E3;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x200B; (tcp)</a></li><li><span class="title-icon "></span><a href="#&#x6162;&#x542F;&#x52A8;-tcp"><b>8.5.5. </b>&#x6162;&#x542F;&#x52A8; (tcp)</a></li><li><span class="title-icon "></span><a href="#&#x538B;&#x7F29;&#x4F18;&#x5316;&#x4EA4;&#x4E92;&#x7684;&#x6570;&#x636E;-jons-&#x3001;byte&#x3001;&#x56FE;&#x7247;-&#x6587;&#x4EF6;"><b>8.5.6. </b>&#x538B;&#x7F29;&#x4F18;&#x5316;&#x4EA4;&#x4E92;&#x7684;&#x6570;&#x636E; (jons &#x3001;byte&#x3001;&#x56FE;&#x7247; &#x6587;&#x4EF6;)</a></li><li><span class="title-icon "></span><a href="#&#x6570;&#x636E;&#x7F13;&#x5B58;"><b>8.5.7. </b>&#x6570;&#x636E;&#x7F13;&#x5B58;</a></li><li><span class="title-icon "></span><a href="#&#x79FB;&#x52A8;&#x7F51;&#x7EDC;&#x91C7;&#x7528;-&#x7206;&#x53D1;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x5E76;&#x8F6C;&#x4E3A;&#x7A7A;&#x95F2;"><b>8.5.8. </b>&#x79FB;&#x52A8;&#x7F51;&#x7EDC;&#x91C7;&#x7528; &#x201C;&#x7206;&#x53D1;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x5E76;&#x8F6C;&#x4E3A;&#x7A7A;&#x95F2;&#x201D;</a></li><li><span class="title-icon "></span><a href="#&#x5927;&#x6570;&#x91CF;&#x91CF;&#x4F18;&#x5148;&#x8003;&#x8651;&#x653E;-wifi-&#x573A;&#x666F;&#x4E0B;&#x8F7D;"><b>8.5.9. </b>&#x5927;&#x6570;&#x91CF;&#x91CF;&#x4F18;&#x5148;&#x8003;&#x8651;&#x653E; WiFi &#x573A;&#x666F;&#x4E0B;&#x8F7D;</a></li><li><span class="title-icon "></span><a href="#&#x8C28;&#x614E;&#x4F7F;&#x7528;-base64-&#x7F16;&#x7801;"><b>8.5.10. </b>&#x8C28;&#x614E;&#x4F7F;&#x7528; base64 &#x7F16;&#x7801;</a></li><li><span class="title-icon "></span><a href="#&#x6D41;&#x91CF;&#x7EDF;&#x8BA1;&#x3001;&#x6D41;&#x91CF;&#x515C;&#x5E95;&#x80FD;&#x529B;"><b>8.5.11. </b>&#x6D41;&#x91CF;&#x7EDF;&#x8BA1;&#x3001;&#x6D41;&#x91CF;&#x515C;&#x5E95;&#x80FD;&#x529B;</a></li></ul></ul><li><span class="title-icon "></span><a href="#&#x5185;&#x5B58;&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><b>9. </b>&#x5185;&#x5B58;&#x4F18;&#x5316; (&#x5B8C;&#x6210;)</a></li><ul><li><span class="title-icon "></span><a href="#&#x5185;&#x5B58;&#x4F18;&#x5316;&#x7684;&#x4F5C;&#x7528;"><b>9.1. </b>&#x5185;&#x5B58;&#x4F18;&#x5316;&#x7684;&#x4F5C;&#x7528;</a></li><li><span class="title-icon "></span><a href="#&#x5E38;&#x89C1;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x573A;&#x666F;"><b>9.2. </b>&#x5E38;&#x89C1;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x573A;&#x666F;</a></li><ul><li><span class="title-icon "></span><a href="#&#x8D44;&#x6E90;&#x6027;&#x5BF9;&#x8C61;&#x672A;&#x5173;&#x95ED;"><b>9.2.1. </b>&#x8D44;&#x6E90;&#x6027;&#x5BF9;&#x8C61;&#x672A;&#x5173;&#x95ED;</a></li><li><span class="title-icon "></span><a href="#&#x6CE8;&#x518C;&#x5BF9;&#x8C61;&#x672A;&#x6CE8;&#x9500;"><b>9.2.2. </b>&#x6CE8;&#x518C;&#x5BF9;&#x8C61;&#x672A;&#x6CE8;&#x9500;</a></li><li><span class="title-icon "></span><a href="#&#x7C7B;&#x7684;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x6301;&#x6709;&#x5927;&#x6570;&#x636E;&#x5BF9;&#x8C61;"><b>9.2.3. </b>&#x7C7B;&#x7684;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x6301;&#x6709;&#x5927;&#x6570;&#x636E;&#x5BF9;&#x8C61;</a></li><li><span class="title-icon "></span><a href="#&#x5355;&#x4F8B;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><b>9.2.4. </b>&#x5355;&#x4F8B;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;</a></li><li><span class="title-icon "></span><a href="#handler-&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><b>9.2.5. </b>Handler &#x5185;&#x5B58;&#x6CC4;&#x6F0F;</a></li><li><span class="title-icon "></span><a href="#asynctask-&#x5185;&#x5B58;&#x6CC4;&#x9732;"><b>9.2.6. </b>AsyncTask &#x5185;&#x5B58;&#x6CC4;&#x9732;</a></li><li><span class="title-icon "></span><a href="#&#x5BB9;&#x5668;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x6CA1;&#x6E05;&#x7406;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><b>9.2.7. </b>&#x5BB9;&#x5668;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x6CA1;&#x6E05;&#x7406;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;</a></li><li><span class="title-icon "></span><a href="#webview-bug-&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><b>9.2.8. </b>WebView Bug &#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;</a></li><li><span class="title-icon "></span><a href="#listview-&#x4F7F;&#x7528;&#x4E0D;&#x5F53;&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><b>9.2.9. </b>ListView &#x4F7F;&#x7528;&#x4E0D;&#x5F53;&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;</a></li></ul><li><span class="title-icon "></span><a href="#application-&#x4F4E;&#x5185;&#x5B58;&#x56DE;&#x8C03;"><b>9.3. </b>Application &#x4F4E;&#x5185;&#x5B58;&#x56DE;&#x8C03;</a></li><li><span class="title-icon "></span><a href="#&#x5185;&#x5B58;&#x4F18;&#x5316;&#x65B9;&#x6848;"><b>9.4. </b>&#x5185;&#x5B58;&#x4F18;&#x5316;&#x65B9;&#x6848;</a></li><ul><li><span class="title-icon "></span><a href="#&#x51CF;&#x5C11;&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x548C;&#x62C6;&#x7BB1;-&#xFF0C;autoboxing-and-unboxing"><b>9.4.1. </b>&#x51CF;&#x5C11;&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x548C;&#x62C6;&#x7BB1; &#xFF0C;Autoboxing and unboxing</a></li><li><span class="title-icon "></span><a href="#&#x5185;&#x5B58;&#x590D;&#x7528;"><b>9.4.2. </b>&#x5185;&#x5B58;&#x590D;&#x7528;</a></li><li><span class="title-icon "></span><a href="#&#x4F7F;&#x7528;&#x6700;&#x4F18;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;"><b>9.4.3. </b>&#x4F7F;&#x7528;&#x6700;&#x4F18;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;</a></li><li><span class="title-icon "></span><a href="#&#x4F7F;&#x7528;&#x5408;&#x7406;&#x7684;&#x7F13;&#x5B58;&#x7B56;&#x7565;-lrucache-least-recently-used"><b>9.4.4. </b>&#x4F7F;&#x7528;&#x5408;&#x7406;&#x7684;&#x7F13;&#x5B58;&#x7B56;&#x7565; LruCache (Least Recently Used)</a></li><li><span class="title-icon "></span><a href="#&#x56FE;&#x7247;&#x5185;&#x5B58;&#x4F18;&#x5316;"><b>9.4.5. </b>&#x56FE;&#x7247;&#x5185;&#x5B58;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x5217;&#x8868;-item-&#x88AB;&#x56DE;&#x6536;&#x4E0D;&#x53EF;&#x89C1;&#x65F6;&#x91CA;&#x653E;&#x6389;&#x5BF9;&#x56FE;&#x7247;&#x7684;&#x5F15;&#x7528;"><b>9.4.6. </b>&#x5217;&#x8868; item &#x88AB;&#x56DE;&#x6536;&#x4E0D;&#x53EF;&#x89C1;&#x65F6;&#x91CA;&#x653E;&#x6389;&#x5BF9;&#x56FE;&#x7247;&#x7684;&#x5F15;&#x7528;</a></li><li><span class="title-icon "></span><a href="#&#x7981;&#x7528;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x62FC;&#x63A5;"><b>9.4.7. </b>&#x7981;&#x7528;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x62FC;&#x63A5;</a></li><li><span class="title-icon "></span><a href="#&#x81EA;&#x5B9A;&#x4E49;view&#x4E2D;&#x7684;&#x5185;&#x5B58;&#x4F18;&#x5316;"><b>9.4.8. </b>&#x81EA;&#x5B9A;&#x4E49;View&#x4E2D;&#x7684;&#x5185;&#x5B58;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#final-&#x4F18;&#x5316;-&#x4E0D;&#x540C;&#x610F;"><b>9.4.9. </b>final &#x4F18;&#x5316; (&#x4E0D;&#x540C;&#x610F;)</a></li></ul><li><span class="title-icon "></span><a href="#android-&#x67E5;&#x770B;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x56DE;&#x6536;&#x60C5;&#x51B5;"><b>9.5. </b>Android &#x67E5;&#x770B;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x56DE;&#x6536;&#x60C5;&#x51B5;</a></li></ul><li><span class="title-icon "></span><a href="#&#x5305;&#x4F53;&#x79EF;&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><b>10. </b>&#x5305;&#x4F53;&#x79EF;&#x4F18;&#x5316; (&#x5B8C;&#x6210;)</a></li><ul><li><span class="title-icon "></span><a href="#&#x4F18;&#x5316;-apk-&#x4F53;&#x79EF;&#x7684;&#x610F;&#x4E49;"><b>10.1. </b>&#x4F18;&#x5316; APK &#x4F53;&#x79EF;&#x7684;&#x610F;&#x4E49;</a></li><li><span class="title-icon "></span><a href="#apk-&#x7684;&#x7EC4;&#x6210;"><b>10.2. </b>apk &#x7684;&#x7EC4;&#x6210;</a></li><li><span class="title-icon "></span><a href="#apk-&#x4F53;&#x79EF;&#x4F18;&#x5316;&#x65B9;&#x6848;"><b>10.3. </b>APK &#x4F53;&#x79EF;&#x4F18;&#x5316;&#x65B9;&#x6848;</a></li><ul><li><span class="title-icon "></span><a href="#proguard-&#x4EE3;&#x7801;&#x6DF7;&#x6DC6;-&#x5EFA;&#x8BAE;"><b>10.3.1. </b>Proguard &#x4EE3;&#x7801;&#x6DF7;&#x6DC6; (&#x5EFA;&#x8BAE;)</a></li><li><span class="title-icon "></span><a href="#r8-&#x4EE3;&#x7801;&#x6DF7;&#x6DC6;"><b>10.3.2. </b>R8 &#x4EE3;&#x7801;&#x6DF7;&#x6DC6;</a></li><li><span class="title-icon "></span><a href="#&#x4F7F;&#x7528;-d8-&#x7F16;&#x8BD1;&#x5668;"><b>10.3.3. </b>&#x4F7F;&#x7528; D8 &#x7F16;&#x8BD1;&#x5668;</a></li><li><span class="title-icon "></span><a href="#redex-&#x53BB;&#x9664;-debug-&#x4FE1;&#x606F;&#x4E0E;&#x884C;&#x53F7;&#x4FE1;&#x606F;"><b>10.3.4. </b>redex &#x53BB;&#x9664; debug &#x4FE1;&#x606F;&#x4E0E;&#x884C;&#x53F7;&#x4FE1;&#x606F;</a></li><li><span class="title-icon "></span><a href="#redex-&#xFF0C;-dex-&#x5206;&#x5305;&#x4F18;&#x5316;"><b>10.3.5. </b>redex &#xFF0C; Dex &#x5206;&#x5305;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#xz-utils-&#x8FDB;&#x884C;-dex-&#x538B;&#x7F29;"><b>10.3.6. </b>XZ Utils &#x8FDB;&#x884C; Dex &#x538B;&#x7F29;</a></li><li><span class="title-icon "></span><a href="#&#x53BB;&#x6389;&#x5197;&#x4F59;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;-&#x5EFA;&#x8BAE;"><b>10.3.7. </b>&#x53BB;&#x6389;&#x5197;&#x4F59;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x5E93; (&#x5EFA;&#x8BAE;)</a></li><li><span class="title-icon "></span><a href="#&#x5220;&#x9664;&#x65E0;&#x7528;&#x4EE3;&#x7801;&#x3001;&#x65E0;&#x7528;&#x8D44;&#x6E90;-&#x5EFA;&#x8BAE;"><b>10.3.8. </b>&#x5220;&#x9664;&#x65E0;&#x7528;&#x4EE3;&#x7801;&#x3001;&#x65E0;&#x7528;&#x8D44;&#x6E90; (&#x5EFA;&#x8BAE;)</a></li><li><span class="title-icon "></span><a href="#&#x81EA;&#x5E26;&#x7684;-&#x8D44;&#x6E90;&#x53BB;&#x91CD;-&#x914D;&#x7F6E;"><b>10.3.9. </b>&#x81EA;&#x5E26;&#x7684; &#x8D44;&#x6E90;&#x53BB;&#x91CD; &#x914D;&#x7F6E;</a></li><li><span class="title-icon "></span><a href="#&#x56FE;&#x7247;&#x538B;&#x7F29;&#x3001;&#x56FE;&#x7247;&#x683C;&#x5F0F;-&#x5EFA;&#x8BAE;"><b>10.3.10. </b>&#x56FE;&#x7247;&#x538B;&#x7F29;&#x3001;&#x56FE;&#x7247;&#x683C;&#x5F0F; (&#x5EFA;&#x8BAE;)</a></li><li><span class="title-icon "></span><a href="#&#x5220;&#x9664;-java-access-&#x65B9;&#x6CD5;"><b>10.3.11. </b>&#x5220;&#x9664; Java access &#x65B9;&#x6CD5;</a></li><li><span class="title-icon "></span><a href="#&#x4EE3;&#x7801;&#x7F16;&#x5199;&#x65B9;&#x9762;&#x7684;&#x4F18;&#x5316;"><b>10.3.12. </b>&#x4EE3;&#x7801;&#x7F16;&#x5199;&#x65B9;&#x9762;&#x7684;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#r&#x6587;&#x4EF6;&#x5E38;&#x91CF;&#x5185;&#x8054;&#xFF0C;r&#x6587;&#x4EF6;&#x7626;&#x8EAB;--&#xFF08;&#x51CF;&#x5C11;&#x4F53;&#x79EF;&#x6709;&#x9650;&#xFF0C;&#x4E00;&#x4E24;m&#x5C31;&#x5F88;&#x5389;&#x5BB3;&#x4E86;&#xFF09;"><b>10.3.13. </b>R&#x6587;&#x4EF6;&#x5E38;&#x91CF;&#x5185;&#x8054;&#xFF0C;R&#x6587;&#x4EF6;&#x7626;&#x8EAB;  &#xFF08;&#x51CF;&#x5C11;&#x4F53;&#x79EF;&#x6709;&#x9650;&#xFF0C;&#x4E00;&#x4E24;M&#x5C31;&#x5F88;&#x5389;&#x5BB3;&#x4E86;&#xFF09;</a></li><li><span class="title-icon "></span><a href="#resconfigs-&#x53BB;&#x9664;&#x65E0;&#x7528;&#x8BED;&#x8A00;&#x8D44;&#x6E90;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;"><b>10.3.14. </b>resConfigs &#x53BB;&#x9664;&#x65E0;&#x7528;&#x8BED;&#x8A00;&#x8D44;&#x6E90; &#xFF08;&#x5EFA;&#x8BAE;&#xFF09;</a></li><li><span class="title-icon "></span><a href="#&#x8D44;&#x6E90;&#x5728;&#x7EBF;&#x5316;"><b>10.3.15. </b>&#x8D44;&#x6E90;&#x5728;&#x7EBF;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x7EDF;&#x4E00;&#x5E94;&#x7528;&#x98CE;&#x683C;&#xFF0C;&#x51CF;&#x5C11;-xml-&#x914D;&#x7F6E;&#x6587;&#x4EF6;-&#x548C;&#x56FE;&#x7247;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;"><b>10.3.16. </b>&#x7EDF;&#x4E00;&#x5E94;&#x7528;&#x98CE;&#x683C;&#xFF0C;&#x51CF;&#x5C11; xml &#x914D;&#x7F6E;&#x6587;&#x4EF6; &#x548C;&#x56FE;&#x7247; &#xFF08;&#x5EFA;&#x8BAE;&#xFF09;</a></li><li><span class="title-icon "></span><a href="#&#x526A;&#x88C1;-so-&#x5E93;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;"><b>10.3.17. </b>&#x526A;&#x88C1; so &#x5E93; &#xFF08;&#x5EFA;&#x8BAE;&#xFF09;</a></li><li><span class="title-icon "></span><a href="#xz-utils--&#x538B;&#x7F29;-so"><b>10.3.18. </b>XZ Utils  &#x538B;&#x7F29; so</a></li><li><span class="title-icon "></span><a href="#so-&#x52A8;&#x6001;&#x4E0B;&#x8F7D;"><b>10.3.19. </b>So &#x52A8;&#x6001;&#x4E0B;&#x8F7D;</a></li><li><span class="title-icon "></span><a href="#&#x63D2;&#x4EF6;&#x5316;&#x601D;&#x8DEF;"><b>10.3.20. </b>&#x63D2;&#x4EF6;&#x5316;&#x601D;&#x8DEF;</a></li></ul></ul><li><span class="title-icon "></span><a href="#&#x7535;&#x6C60;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><b>11. </b>&#x7535;&#x6C60;&#x8017;&#x7535;&#x4F18;&#x5316; (&#x5B8C;&#x6210;)</a></li><ul><li><span class="title-icon "></span><a href="#android&#x7CFB;&#x7EDF;&#x505A;&#x7684;-&#x7701;&#x7535;&#x4F18;&#x5316;"><b>11.1. </b>Android&#x7CFB;&#x7EDF;&#x505A;&#x7684; &#x7701;&#x7535;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x8017;&#x7535;&#x5206;&#x6790;&#x5DE5;&#x5177;"><b>11.2. </b>&#x8017;&#x7535;&#x5206;&#x6790;&#x5DE5;&#x5177;</a></li><ul><li><span class="title-icon "></span><a href="#energy-profiler"><b>11.2.1. </b>Energy Profiler</a></li><li><span class="title-icon "></span><a href="#battery-historian-&#x7535;&#x91CF;&#x5206;&#x6790;&#x5DE5;&#x5177;"><b>11.2.2. </b>battery-historian &#x7535;&#x91CF;&#x5206;&#x6790;&#x5DE5;&#x5177;</a></li></ul><li><span class="title-icon "></span><a href="#&#x68C0;&#x67E5;&#x7EDF;&#x8BA1;-&#x5355;&#x4E2A;app&#x7684;&#x8017;&#x7535;&#x60C5;&#x51B5;"><b>11.3. </b>&#x68C0;&#x67E5;&#x7EDF;&#x8BA1; &#x5355;&#x4E2A;App&#x7684;&#x8017;&#x7535;&#x60C5;&#x51B5;</a></li><li><span class="title-icon "></span><a href="#&#x7701;&#x7535;&#x4F18;&#x5316;&#x65B9;&#x6848;"><b>11.4. </b>&#x7701;&#x7535;&#x4F18;&#x5316;&#x65B9;&#x6848;</a></li><ul><li><span class="title-icon "></span><a href="#&#x4F18;&#x5316;&#x540E;&#x53F0;&#x8017;&#x7535;"><b>11.4.1. </b>&#x4F18;&#x5316;&#x540E;&#x53F0;&#x8017;&#x7535;</a></li><li><span class="title-icon "></span><a href="#&#x5236;&#x5B9A;-&#x7B26;&#x5408;&#x7CFB;&#x7EDF;&#x7684;&#x8017;&#x7535;&#x89C4;&#x5219;"><b>11.4.2. </b>&#x5236;&#x5B9A; &#x7B26;&#x5408;&#x7CFB;&#x7EDF;&#x7684;&#x8017;&#x7535;&#x89C4;&#x5219;</a></li><li><span class="title-icon "></span><a href="#cpu-&#x65F6;&#x95F4;&#x7247;&#x4F18;&#x5316;"><b>11.4.3. </b>CPU &#x65F6;&#x95F4;&#x7247;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x7F51;&#x7EDC;&#x8017;&#x7535;&#x4F18;&#x5316;"><b>11.4.4. </b>&#x7F51;&#x7EDC;&#x8017;&#x7535;&#x4F18;&#x5316;</a></li><li><span class="title-icon "></span><a href="#&#x5B9A;&#x4F4D;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x3001;&#x4F20;&#x611F;&#x5668;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x3001;&#x84DD;&#x7259;&#x8017;&#x7535;&#x4F18;&#x5316;&#x7B49;"><b>11.4.5. </b>&#x5B9A;&#x4F4D;&#x8017;&#x7535;&#x4F18;&#x5316; &#x3001;&#x4F20;&#x611F;&#x5668;&#x8017;&#x7535;&#x4F18;&#x5316; &#x3001;&#x84DD;&#x7259;&#x8017;&#x7535;&#x4F18;&#x5316;&#x7B49;</a></li><li><span class="title-icon "></span><a href="#&#x754C;&#x9762;&#x8017;&#x7535;&#x4F18;&#x5316;"><b>11.4.6. </b>&#x754C;&#x9762;&#x8017;&#x7535;&#x4F18;&#x5316;</a></li></ul></ul><li><span class="title-icon "></span><a href="#&#x7A33;&#x5B9A;&#x6027;-&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><b>12. </b>&#x7A33;&#x5B9A;&#x6027; &#x4F18;&#x5316; (&#x5B8C;&#x6210;)</a></li><ul><li><span class="title-icon "></span><a href="#&#x5D29;&#x6E83;&#x7387;-&#x3001;dau"><b>12.1. </b>&#x5D29;&#x6E83;&#x7387; &#x3001;DAU</a></li><li><span class="title-icon "></span><a href="#&#x7A33;&#x5B9A;&#x7684;&#x7EAC;&#x5EA6;"><b>12.2. </b>&#x7A33;&#x5B9A;&#x7684;&#x7EAC;&#x5EA6;</a></li><li><span class="title-icon "></span><a href="#&#x7A33;&#x5B9A;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;"><b>12.3. </b>&#x7A33;&#x5B9A;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;</a></li><li><span class="title-icon "></span><a href="#&#x7A33;&#x5B9A;&#x76D1;&#x63A7;&#x5DE5;&#x5177;"><b>12.4. </b>&#x7A33;&#x5B9A;&#x76D1;&#x63A7;&#x5DE5;&#x5177;</a></li><li><span class="title-icon "></span><a href="#app&#x5355;&#x5143;&#x6D4B;&#x8BD5;"><b>12.5. </b>APP&#x5355;&#x5143;&#x6D4B;&#x8BD5;</a></li><ul><li><span class="title-icon "></span><a href="#&#x5355;&#x5143;&#x6D4B;&#x8BD5;"><b>12.5.1. </b>&#x5355;&#x5143;&#x6D4B;&#x8BD5;</a></li><li><span class="title-icon "></span><a href="#&#x5355;&#x5143;&#x6D4B;&#x8BD5;-junit4-&#x65B9;&#x6848;"><b>12.5.2. </b>&#x5355;&#x5143;&#x6D4B;&#x8BD5; JUnit4 &#x65B9;&#x6848;</a></li><li><span class="title-icon "></span><a href="#&#x5355;&#x5143;&#x6D4B;&#x8BD5;-instrumentation-&#x65B9;&#x6848;"><b>12.5.3. </b>&#x5355;&#x5143;&#x6D4B;&#x8BD5; Instrumentation &#x65B9;&#x6848;</a></li><li><span class="title-icon "></span><a href="#&#x5355;&#x5143;&#x6D4B;&#x8BD5;-robolectric-&#x65B9;&#x6848;"><b>12.5.4. </b>&#x5355;&#x5143;&#x6D4B;&#x8BD5; robolectric &#x65B9;&#x6848;</a></li></ul><li><span class="title-icon "></span><a href="#crash-&#x5D29;&#x6E83;&#x89E3;&#x51B3;&#x529E;&#x6CD5;"><b>12.6. </b>crash &#x5D29;&#x6E83;&#x89E3;&#x51B3;&#x529E;&#x6CD5;</a></li><li><span class="title-icon "></span><a href="#&#x5982;&#x679C;&#x53D1;&#x751F;&#x4E86;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#xFF0C;&#x600E;&#x4E48;&#x6B62;&#x635F;"><b>12.7. </b>&#x5982;&#x679C;&#x53D1;&#x751F;&#x4E86;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#xFF0C;&#x600E;&#x4E48;&#x6B62;&#x635F;</a></li></ul><li><span class="title-icon "></span><a href="#&#x63D0;&#x95EE;-&#xFF08;&#x6301;&#x7EED;&#x66F4;&#x65B0;&#xFF09;"><b>13. </b>&#x63D0;&#x95EE; &#xFF08;&#x6301;&#x7EED;&#x66F4;&#x65B0;&#xFF09;</a></li><ul><li><span class="title-icon "></span><a href="#&#x5982;&#x4F55;&#x6280;&#x672F;&#x9009;&#x578B;"><b>13.1. </b>&#x5982;&#x4F55;&#x6280;&#x672F;&#x9009;&#x578B;</a></li><li><span class="title-icon "></span><a href="#&#x5BFC;&#x81F4;-&#x4EE3;&#x7801;&#x8D28;&#x91CF;&#x95EE;&#x9898;-&#x7684;&#x539F;&#x56E0;"><b>13.2. </b>&#x5BFC;&#x81F4; &#x4EE3;&#x7801;&#x8D28;&#x91CF;&#x95EE;&#x9898; &#x7684;&#x539F;&#x56E0;</a></li><li><span class="title-icon "></span><a href="#&#x5982;&#x4F55;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x8D28;&#x91CF;"><b>13.3. </b>&#x5982;&#x4F55;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x8D28;&#x91CF;</a></li><li><span class="title-icon "></span><a href="#&#x5982;&#x4F55;-&#x63D0;&#x9AD8;-&#x7EBF;&#x4E0A;&#x4EE3;&#x7801;-&#x8D28;&#x91CF;"><b>13.4. </b>&#x5982;&#x4F55; &#x63D0;&#x9AD8; &#x7EBF;&#x4E0A;&#x4EE3;&#x7801; &#x8D28;&#x91CF;</a></li><li><span class="title-icon "></span><a href="#&#x5982;&#x4F55;&#x81EA;&#x5B9A;&#x4E49;-lint"><b>13.5. </b>&#x5982;&#x4F55;&#x81EA;&#x5B9A;&#x4E49; Lint</a></li><ul><li><span class="title-icon "></span><a href="#demo--linkedin-&#x65B9;&#x6848;"><b>13.5.1. </b>demo ( LinkedIn &#x65B9;&#x6848;)</a></li></ul></ul></ul></div><a href="#app-&#x4F18;&#x5316;--apm" id="anchorNavigationExGoTop"><i class="fa fa-arrow-up"></i></a><h1 id="app-&#x4F18;&#x5316;--apm"><a name="app-&#x4F18;&#x5316;--apm" class="anchor-navigation-ex-anchor" href="#app-&#x4F18;&#x5316;--apm"><i class="fa fa-link" aria-hidden="true"></i></a>1. App &#x4F18;&#x5316; , APM</h1>
<p>&#x5E94;&#x7528;&#x7684;&#x6027;&#x80FD;&#x4F18;&#x5316;&#xFF0C;&#x9700;&#x8981;&#x5EFA;&#x7ACB;&#x4E00;&#x5957;&#x6210;&#x4F53;&#x7CFB;&#x7684;&#x6027;&#x80FD;&#x4F18;&#x5316;&#x65B9;&#x6848;&#xFF0C;
&#x8FD9;&#x5957;&#x65B9;&#x6848;&#x88AB;&#x4E1A;&#x754C;&#x79F0;&#x4E3A; APM (Application Performance Manange)&#x3002;</p>
<h1 id="&#x7ED8;&#x5236;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><a name="&#x7ED8;&#x5236;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x7ED8;&#x5236;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>2. &#x7ED8;&#x5236;&#x4F18;&#x5316; &#xFF08;&#x5B8C;&#x6210;&#xFF09;</h1>
<pre><code class="lang-text">&#x5728; Android &#x7684;&#x6BCF;&#x4E2A; View &#x90FD;&#x4F1A;&#x7ECF;&#x8FC7; Measure &#x548C; Layout 
&#x6765;&#x786E;&#x5B9A;&#x5F53;&#x524D;&#x9700;&#x8981;&#x7ED8;&#x5236;&#x7684;View&#x6240;&#x5728;&#x7684;&#x5927;&#x5C0F;&#x548C;&#x4F4D;&#x7F6E;&#xFF0C;
&#x7136;&#x540E;&#x901A;&#x8FC7; Draw &#x7ED8;&#x5236;&#x5230; surface &#x4E0A;&#x3002;
&#x5728; Android &#x7CFB;&#x7EDF;&#x4E2D;&#x6574;&#x4F53;&#x7684;&#x7ED8;&#x5236;&#x6E90;&#x7801;&#x662F;&#x5728; ViewRootImpl.performTraversals()&#x65B9;&#x6CD5;&#xFF0C;
&#x901A;&#x8FC7;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x53EF;&#x4EE5;&#x770B;&#x51FA; Measure &#x548C; Layout &#x90FD;&#x662F;&#x9012;&#x5F52;&#x6765;&#x83B7;&#x53D6;View&#x7684;&#x5927;&#x5C0F;&#x548C;&#x4F4D;&#x7F6E;&#xFF0C;
&#x5E76;&#x4E14;&#x4EE5;&#x6DF1;&#x5EA6;&#x4F5C;&#x4E3A;&#x4F18;&#x5148;&#x7EA7;&#x3002;
&#x663E;&#x7136;&#xFF0C;&#x5C42;&#x7EA7;&#x8D8A;&#x6DF1;&#xFF0C;&#x5143;&#x7D20;&#x8D8A;&#x591A;&#xFF0C;&#x8017;&#x65F6;&#x5C31;&#x8D8A;&#x957F;&#x3002;

&#x6240;&#x4EE5;&#xFF0C;&#x7ED8;&#x5236;&#x4F18;&#x5316;&#x6700;&#x7EC8;&#x7684;&#x95EE;&#x9898;&#x4F1A;&#x8F6C;&#x5316;&#x4E3A; &#x5E03;&#x5C40;&#x4F18;&#x5316; &#x548C;&#x5361;&#x987F;&#x4F18;&#x5316;&#x3002;
</code></pre>
<h2 id="&#x7ED8;&#x5236;&#x7C7B;&#x578B;"><a name="&#x7ED8;&#x5236;&#x7C7B;&#x578B;" class="anchor-navigation-ex-anchor" href="#&#x7ED8;&#x5236;&#x7C7B;&#x578B;"><i class="fa fa-link" aria-hidden="true"></i></a>2.1. &#x7ED8;&#x5236;&#x7C7B;&#x578B;</h2>
<pre><code class="lang-text">Android &#x652F;&#x6301;&#x4E24;&#x79CD;&#x7ED8;&#x5236;&#x65B9;&#x5F0F; &#xFF0C;&#x5373; &#x8F6F;&#x4EF6;&#x7ED8;&#x5236;&#xFF08;CPU&#xFF09;&#x3001;&#x786C;&#x4EF6;&#x7ED8;&#x5236;&#xFF08;GPU&#xFF09;

&#x786C;&#x4EF6;&#x52A0;&#x901F;&#x4ECE; Android 3.0 &#x5F00;&#x59CB;&#x652F;&#x6301;&#xFF0C;&#x5B83;&#x5728;UI&#x663E;&#x793A;&#x548C;&#x7ED8;&#x5236;&#x6548;&#x7387;&#x65B9;&#x9762;&#x8FDC;&#x9AD8;&#x4E8E;&#x8F6F;&#x4EF6;&#x7ED8;&#x5236;&#x3002;
&#x4F46;&#x5B83;&#x7684;&#x5C40;&#x9650;&#x5982;&#x4E0B;&#xFF1A;
&#x8017;&#x7535;&#xFF1A;GPU&#x529F;&#x8017;&#x9AD8;&#x4E8E;CPU&#x3002;
&#x517C;&#x5BB9;&#x6027;&#xFF1A;&#x4E0D;&#x517C;&#x5BB9;&#x67D0;&#x4E9B;&#x63A5;&#x53E3;&#x548C;&#x51FD;&#x6570;&#x3002;
&#x5185;&#x5B58;&#x5927;&#xFF1A;&#x4F7F;&#x7528; OpenGL &#x7684;&#x63A5;&#x53E3;&#x9700;&#x8981;&#x5360;&#x7528;&#x8F83;&#x5927;&#x5185;&#x5B58;&#x3002;
</code></pre>
<h1 id="&#x5E03;&#x5C40;&#x4F18;&#x5316;--&#x5B8C;&#x6210;"><a name="&#x5E03;&#x5C40;&#x4F18;&#x5316;--&#x5B8C;&#x6210;" class="anchor-navigation-ex-anchor" href="#&#x5E03;&#x5C40;&#x4F18;&#x5316;--&#x5B8C;&#x6210;"><i class="fa fa-link" aria-hidden="true"></i></a>3. &#x5E03;&#x5C40;&#x4F18;&#x5316;  (&#x5B8C;&#x6210;)</h1>
<pre><code class="lang-text">&#x5E03;&#x5C40;&#x4F18;&#x5316;&#x7684;&#x6838;&#x5FC3;&#x95EE;&#x9898;&#x5C31;&#x662F;&#x8981;&#x89E3;&#x51B3;&#x56E0;&#x5E03;&#x5C40;&#x6E32;&#x67D3;&#x6027;&#x80FD;&#x4E0D;&#x4F73;&#x800C;&#x5BFC;&#x81F4;&#x7684;&#x5E94;&#x7528;&#x5361;&#x987F;&#x95EE;&#x9898;&#x3002;
&#x5361;&#x987F;&#x4F18;&#x5316;&#x53EF;&#x4EE5;&#x770B;&#x505A;&#x662F;&#x5361;&#x987F;&#x4F18;&#x5316;&#x7684;&#x5B50;&#x96C6;&#x3002;
</code></pre>
<h2 id="&#x5361;&#x987F;&#x5206;&#x6790;&#x5DE5;&#x5177;-systrace-&#xFF0C;&#x67E5;&#x770B;&#x8017;&#x65F6;&#x6389;&#x5E27;"><a name="&#x5361;&#x987F;&#x5206;&#x6790;&#x5DE5;&#x5177;-systrace-&#xFF0C;&#x67E5;&#x770B;&#x8017;&#x65F6;&#x6389;&#x5E27;" class="anchor-navigation-ex-anchor" href="#&#x5361;&#x987F;&#x5206;&#x6790;&#x5DE5;&#x5177;-systrace-&#xFF0C;&#x67E5;&#x770B;&#x8017;&#x65F6;&#x6389;&#x5E27;"><i class="fa fa-link" aria-hidden="true"></i></a>3.1. &#x5361;&#x987F;&#x5206;&#x6790;&#x5DE5;&#x5177; Systrace &#xFF0C;&#x67E5;&#x770B;&#x8017;&#x65F6;/&#x6389;&#x5E27;</h2>
<pre><code class="lang-text">Systrace &#x662F; Android4.1 &#x4E2D; &#x65B0;&#x589E;&#x7684;&#x6027;&#x80FD;&#x6570;&#x636E;&#x91C7;&#x6837;&#x548C;&#x5206;&#x6790;&#x5DE5;&#x5177;&#x3002;
&#x5B83;&#x53EF;&#x5E2E;&#x52A9;&#x5F00;&#x53D1;&#x8005;&#x6536;&#x96C6; Android &#x5173;&#x952E;&#x5B50;&#x7CFB;&#x7EDF;&#xFF08;&#x5982; SurfaceFlinger/ Kernel/Input/Display 
&#x7B49; Framework &#x90E8;&#x5206;&#x5173;&#x952E;&#x6A21;&#x5757;&#x3001;&#x670D;&#x52A1;&#xFF0C;View&#x7CFB;&#x7EDF;&#x7B49;&#xFF09;&#x7684;&#x8FD0;&#x884C;&#x4FE1;&#x606F;&#xFF0C;
&#x4ECE;&#x800C;&#x5E2E;&#x52A9;&#x5F00;&#x53D1;&#x8005;&#x66F4;&#x76F4;&#x89C2;&#x7684;&#x5206;&#x6790;&#x7CFB;&#x7EDF;&#x74F6;&#x9888;&#xFF0C;&#x6539;&#x8FDB;&#x6027;&#x80FD;&#x3002;

Systrace &#x7684;&#x539F;&#x7406;&#x662F;&#x5728;&#x7CFB;&#x7EDF;&#x7684;&#x4E00;&#x4E9B;&#x5173;&#x952E;&#x94FE;&#x8DEF;&#x63D2;&#x5165;&#x4E00;&#x4E9B;&#x4FE1;&#x606F;(&#x79F0;&#x4E4B;&#x4E3A;Label)
( &#x7CFB;&#x7EDF;&#x7684;&#x6E32;&#x67D3;&#x7684;&#x5173;&#x952E;&#x6B65;&#x9AA4;&#x90FD;&#x6709;framework&#x9884;&#x7F6E;&#x7684;label )&#xFF0C;
&#x901A;&#x8FC7;Label&#x7684;&#x5F00;&#x59CB;&#x548C;&#x7ED3;&#x675F;&#x6765;&#x786E;&#x5B9A;&#x67D0;&#x4E2A;&#x6838;&#x5FC3;&#x8FC7;&#x7A0B;&#x7684;&#x6267;&#x884C;&#x65F6;&#x95F4;&#xFF0C;
&#x7136;&#x540E;&#x628A;&#x8FD9;&#x4E9B;Label&#x4FE1;&#x606F;&#x6536;&#x96C6;&#x8D77;&#x6765;&#x5F97;&#x5230;&#x7CFB;&#x7EDF;&#x5173;&#x952E;&#x8DEF;&#x5F84;&#x7684;&#x8FD0;&#x884C;&#x65F6;&#x95F4;&#x4FE1;&#x606F;&#xFF0C;
&#x8FDB;&#x800C;&#x5F97;&#x5230;&#x6574;&#x4E2A;&#x7CFB;&#x7EDF;&#x7684;&#x8FD0;&#x884C;&#x6027;&#x80FD;&#x4FE1;&#x606F;&#x3002;

&#x7CFB;&#x7EDF;&#x7248;&#x672C;&#x8D8A;&#x9AD8;&#xFF0C;Android Framework&#x4E2D;&#x6DFB;&#x52A0;&#x7684;&#x7CFB;&#x7EDF;&#x53EF;&#x7528;Label&#x5C31;&#x8D8A;&#x591A;&#xFF0C;
&#x80FD;&#x591F;&#x652F;&#x6301;&#x548C;&#x5206;&#x6790;&#x7684;&#x7CFB;&#x7EDF;&#x6A21;&#x5757;&#x4E5F;&#x5C31;&#x8D8A;&#x591A;&#xFF1B;
&#x56E0;&#x6B64;&#xFF0C;&#x5728;&#x53EF;&#x80FD;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x5C3D;&#x53EF;&#x80FD;&#x4F7F;&#x7528;&#x9AD8;&#x7248;&#x672C;&#x7684;Android&#x7CFB;&#x7EDF;&#x6765;&#x8FDB;&#x884C;&#x5206;&#x6790;&#xFF1B;
&#x7136;&#x540E;&#x5BF9;&#x5F85;&#x5206;&#x6790;&#x7684;App&#x4E5F;&#x6709;&#x4E00;&#x4E2A;&#x9650;&#x5236;&#x2014;&#x2014;&#x9700;&#x8981;&#x662F;debuggable&#x7684;&#x3002;

// &#x6253;&#x5F00; Systrace 
&#x7531;&#x4E8E;Androidstudio &#x4E0D;&#x65B9;&#x4FBF;&#x627E;&#x5230;&#x6216;&#x8005;&#x627E;&#x4E0D;&#x5230; Systrace&#x7684;&#x5165;&#x53E3;&#xFF0C;
&#x6240;&#x4EE5;&#x5EFA;&#x8BAE; &#x53BB; F:\sdk2\tools\monitor.bat  &#x53CC;&#x51FB;&#x6253;&#x5F00;

&#x5728;&#x542F;&#x52A8;trace&#x524D;&#x6307;&#x5B9A;&#x91C7;&#x96C6;&#x54EA;&#x4E9B;&#x7CFB;&#x7EDF;&#x9884;&#x7F6E;&#x7684;&#x6807;&#x7B7E;&#x3002; 
Graphics: Graphic&#x7CFB;&#x7EDF;&#x7684;&#x76F8;&#x5173;&#x4FE1;&#x606F;&#xFF0C;&#x5305;&#x62EC;SerfaceFlinger&#xFF0C;
VSYNC&#x6D88;&#x606F;&#xFF0C;Texture&#xFF0C;RenderThread&#x7B49;&#xFF1B;&#x7528;&#x6765;&#x5206;&#x6790;&#x5361;&#x987F;&#x3002;
View System: View&#x7ED8;&#x5236;&#x7CFB;&#x7EDF;&#x7684;&#x76F8;&#x5173;&#x4FE1;&#x606F;&#xFF0C;&#x6BD4;&#x5982;onMeasure&#xFF0C;onLayout&#x7B49;&#xFF1B;&#x7528;&#x6765;&#x5206;&#x6790;&#x5361;&#x987F;&#x3002;
Activity Manager:  ActivityManager&#x8C03;&#x7528;&#x7684;&#x76F8;&#x5173;&#x4FE1;&#x606F;&#xFF1B;&#x7528;&#x6765;&#x5206;&#x6790;Activity&#x7684;&#x542F;&#x52A8;&#x8FC7;&#x7A0B;&#x3002;
Dalvik VM: &#x865A;&#x62DF;&#x673A;&#x76F8;&#x5173;&#x4FE1;&#x606F;&#xFF0C;&#x6BD4;&#x5982;GC&#x505C;&#x987F;&#x7B49;&#x3002;
CPU Scheduling: CPU&#x8C03;&#x5EA6;&#x7684;&#x4FE1;&#x606F;&#xFF1B;&#x4F60;&#x80FD;&#x770B;&#x5230;CPU&#x5728;&#x6BCF;&#x4E2A;&#x65F6;&#x95F4;&#x6BB5;&#x5728;&#x8FD0;&#x884C;&#x4EC0;&#x4E48;&#x7EBF;&#x7A0B;&#xFF1B;&#x7EBF;&#x7A0B;&#x8C03;&#x5EA6;&#x60C5;&#x51B5;&#xFF0C;&#x6BD4;&#x5982;&#x9501;&#x4FE1;&#x606F;&#x3002;

&#x5728; Chrome&#x6D4F;&#x89C8;&#x5668;  &#x5730;&#x5740;&#x680F;&#x8F93;&#x5165; chrome://tracing &#xFF0C;
(&#x6CA1;&#x542F;&#x52A8;&#x8FD9;&#x4E2A;&#x670D;&#x52A1;&#xFF0C;trace.html &#x6253;&#x5F00;&#x6709;&#x65F6;&#x662F;&#x7A7A;&#x767D;&#x7684;)
&#x7136;&#x540E;&#x5C06;&#x751F;&#x6210;&#x7684;trace.html&#x6587;&#x4EF6;&#x62D6;&#x8FDB;&#x6765;&#xFF0C;&#x6216;&#x8005;&#x901A;&#x8FC7;load&#x6309;&#x94AE;&#x5BFC;&#x5165;&#x3002;
&#x5E38;&#x7528;&#x5FEB;&#x6377;&#x952E;&#x8BF4;&#x660E;&#xFF1A;
W: &#x653E;&#x5927;&#x6A2A;&#x8F74;&#xFF0C;&#x7528;&#x4E8E;&#x67E5;&#x770B;&#x8017;&#x65F6;&#x65B9;&#x6CD5;&#x7EC6;&#x8282;&#xFF1B;
S: &#x7F29;&#x5C0F;&#x6A2A;&#x8F74;&#xFF0C;&#x7528;&#x4E8E;&#x67E5;&#x770B;&#x6574;&#x4F53;&#x60C5;&#x51B5;&#xFF1B;
A&#xFF1A; &#x5C06;&#x9762;&#x677F;&#x5DE6;&#x79FB;&#xFF1B; &#xFF08;&#x5DE6;&#x53F3;&#x7684;&#x65B9;&#x5411;&#x952E;&#x4E5F;&#x53EF;&#x4EE5;&#x79FB;&#x52A8;&#xFF09;
D: &#x5C06;&#x9762;&#x677F;&#x53F3;&#x79FB;&#xFF1B;
M: &#x9AD8;&#x4EAE;&#x67D0;&#x4E00;&#x6BB5;&#x8017;&#x65F6;&#x5185;&#x5BB9;&#x3002;

&#x627E;&#x5230;&#x81EA;&#x5DF1;APP&#x5305;&#x540D;&#x7684;&#x8FDB;&#x7A0B;
&#x53F3;&#x4FA7;&#x6709;&#x4E00;&#x884C;&#x5199;&#x6709;F&#x7684;&#x5708;&#x5708;&#xFF0C;&#x8868;&#x793A;&#x6BCF;&#x4E2A;Frame&#x7684;&#x7EFC;&#x5408;&#x8BC4;&#x4EF7;&#x3002;
&#x5982;&#x679C;&#x662F;&#x7EFF;&#x8272;&#xFF0C;&#x8868;&#x793A;&#x8FD9;&#x4E00;&#x5E27;&#x7684;&#x6E32;&#x67D3;&#x662F;ok&#x7684;&#x3002;&#x5982;&#x679C;&#x662F;&#x7EA2;&#x8272;&#x6216;&#x8005;&#x9EC4;&#x8272;&#xFF0C;&#x8868;&#x793A;&#x6E32;&#x67D3;&#x8D85;&#x65F6;&#x4E86;&#x3002; 
&#x70B9;&#x51FB;&#x8FD9;&#x4E2A;F&#x5706;&#x5708;&#xFF0C;&#x5728;&#x4E0B;&#x90E8;&#x7684;&#x7A97;&#x53E3;&#x4E2D;&#x4F1A;&#x5C55;&#x793A;&#x4E00;&#x4E9B;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#x3002;
&#x5982;&#x679C;&#x8FD9;&#x4E00;&#x5E27;&#x7684;&#x6E32;&#x67D3;&#x6CA1;&#x6709;&#x4EFB;&#x4F55;&#x95EE;&#x9898;&#xFF0C;&#x4E0B;&#x9762;&#x7684;&#x5185;&#x5BB9;&#x662F;&#x7A7A;&#x7684;&#xFF1B;
&#x5982;&#x679C;&#x8FD9;&#x4E00;&#x5E27;&#x6709;&#x95EE;&#x9898;&#xFF0C;&#x4F1A;&#x5C55;&#x793A;Alert&#x4FE1;&#x606F;&#x3002;

&#x4F46;&#x662F;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F; Systrace &#x53EA;&#x662F;&#x80FD;&#x770B;&#x5230;&#x51FA;&#x9519;&#x7684;&#x7C7B;&#x578B;&#x548C;&#x4FEE;&#x6539;&#x601D;&#x8DEF;&#xFF0C;
&#x5E76;&#x4E0D;&#x80FD;&#x50CF;&#x5728;Androidstudio&#x91CC;&#x9762;&#x5982;&#x679C;&#x62A5;&#x9519;&#x53EF;&#x4EE5;&#x7CBE;&#x786E;&#x5230;&#x5177;&#x4F53;&#x7684;&#x4EE3;&#x7801;&#x884C;&#x3002;
</code></pre>
<p><img src="../pics/Systrace&#x6253;&#x5F00;.png" alt="">
<img src="../pics/Systrace&#x754C;&#x9762;.png" alt=""></p>
<h2 id="&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x5E38;&#x89C4;&#x65B9;&#x6848;"><a name="&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x5E38;&#x89C4;&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x5E38;&#x89C4;&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>3.2. &#x5E03;&#x5C40;&#x4F18;&#x5316; &#x5E38;&#x89C4;&#x65B9;&#x6848;</h2>
<h3 id="&#x51CF;&#x5C11;&#x5C42;&#x7EA7;"><a name="&#x51CF;&#x5C11;&#x5C42;&#x7EA7;" class="anchor-navigation-ex-anchor" href="#&#x51CF;&#x5C11;&#x5C42;&#x7EA7;"><i class="fa fa-link" aria-hidden="true"></i></a>3.2.1. &#x51CF;&#x5C11;&#x5C42;&#x7EA7;</h3>
<pre><code class="lang-text">&#x7531;&#x4E8E;Android&#x7684;&#x788E;&#x7247;&#x5316;&#x7A0B;&#x5EA6;&#x5F88;&#x9AD8;&#xFF0C;&#x6240;&#x4EE5;&#x4F7F;&#x7528; RelativeLayout &#x80FD;&#x4F7F;&#x6784;&#x5EFA;&#x7684;&#x5E03;&#x5C40;&#x9002;&#x5E94;&#x6027;&#x66F4;&#x5F3A;&#x3002;
&#x7EA6;&#x675F;&#x5E03;&#x5C40; ConstraintLayout &#x6BD4; RelativeLayout &#x76F8;&#x6BD4;&#xFF0C;&#x80FD;&#x6D88;&#x9664;&#x4E00;&#x4E9B;&#x5197;&#x4F59;&#x5E03;&#x5C40;&#x3002;
</code></pre>
<h3 id="&#x5E03;&#x5C40;&#x590D;&#x7528;"><a name="&#x5E03;&#x5C40;&#x590D;&#x7528;" class="anchor-navigation-ex-anchor" href="#&#x5E03;&#x5C40;&#x590D;&#x7528;"><i class="fa fa-link" aria-hidden="true"></i></a>3.2.2. &#x5E03;&#x5C40;&#x590D;&#x7528;</h3>
<pre><code>```

###  &#x907F;&#x514D;&#x8FC7;&#x5EA6;&#x7ED8;&#x5236;
```text
&#x5BFC;&#x81F4;&#x8FC7;&#x5EA6;&#x7ED8;&#x5236;&#x7684;&#x4E3B;&#x8981;&#x539F;&#x56E0;&#x662F;&#xFF1A;
XML&#x5E03;&#x5C40;&#xFF1A;&#x63A7;&#x4EF6;&#x6709;&#x91CD;&#x53E0;&#x4E14;&#x90FD;&#x6709;&#x8BBE;&#x7F6E;&#x80CC;&#x666F;&#x3002;
View&#x81EA;&#x7ED8;&#xFF1A;View.OnDraw&#x91CC;&#x9762;&#x540C;&#x4E00;&#x4E2A;&#x533A;&#x57DF;&#x88AB;&#x7ED8;&#x5236;&#x591A;&#x6B21;&#x3002;

&#x8FC7;&#x5EA6;&#x7ED8;&#x5236;&#x68C0;&#x6D4B;&#x5DE5;&#x5177;
&#x6253;&#x5F00;&#x624B;&#x673A;&#x5F00;&#x53D1;&#x8005;&#x9009;&#x9879;&#x4E2D;&#x7684;Show GPU Overdraw&#x9009;&#x9879;&#xFF0C;
&#x4F1A;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x989C;&#x8272;&#x6765;&#x8868;&#x793A;&#x8FC7;&#x5EA6;&#x7ED8;&#x5236;&#x6B21;&#x6570;&#xFF0C;
&#x4F9D;&#x6B21;&#x662F;&#x65E0;&#x3001;&#x84DD;&#x3001;&#x7EFF;&#x3001;&#x6DE1;&#x7EA2;&#x3001;&#x6DF1;&#x7EA2;&#xFF0C;&#x5206;&#x522B;&#x5BF9;&#x5E94;0-4&#x6B21;&#x8FC7;&#x5EA6;&#x7ED8;&#x5236;&#x3002;
</code></pre><h3 id="&#x5408;&#x7406;&#x7684;&#x5237;&#x65B0;&#x673A;&#x5236;"><a name="&#x5408;&#x7406;&#x7684;&#x5237;&#x65B0;&#x673A;&#x5236;" class="anchor-navigation-ex-anchor" href="#&#x5408;&#x7406;&#x7684;&#x5237;&#x65B0;&#x673A;&#x5236;"><i class="fa fa-link" aria-hidden="true"></i></a>3.2.3. &#x5408;&#x7406;&#x7684;&#x5237;&#x65B0;&#x673A;&#x5236;</h3>
<pre><code class="lang-text">1&#x3001;&#x51CF;&#x5C11;&#x5237;&#x65B0;&#x6B21;&#x6570;
&#x63A7;&#x5236;&#x5237;&#x65B0;&#x9891;&#x7387;&#x3001;&#x907F;&#x514D;&#x6CA1;&#x6709;&#x5FC5;&#x8981;&#x7684;&#x5237;&#x65B0;&#x3002;

2&#x3001;&#x7F29;&#x5C0F;&#x5237;&#x65B0;&#x533A;&#x57DF;
&#x5982;&#x81EA;&#x5B9A;&#x4E49;View&#x4E00;&#x822C;&#x91C7;&#x7528; invalidate &#x65B9;&#x6CD5;&#x5237;&#x65B0;&#xFF0C;&#x53EF;&#x4EE5;&#x7528;&#x4EE5;&#x4E0B;&#x91CD;&#x8F7D;&#x65B9;&#x6CD5;&#x5237;&#x65B0;&#x8981;&#x5237;&#x65B0;&#x7684;&#x533A;&#x57DF;&#xFF1A;
invalidate(Rect dirty);
invalidate(int left, int top, int right, int bottom);

3&#x3001;&#x907F;&#x514D;&#x540E;&#x53F0;&#x7EBF;&#x7A0B;&#x7684;&#x5F71;&#x54CD;
&#x5982;&#x901A;&#x8FC7;&#x76D1;&#x542C; ListView&#x7684;onScrollStateChanged&#x4E8B;&#x4EF6;&#xFF0C;
&#x5728;&#x6EDA;&#x52A8;&#x65F6;&#x6682;&#x505C;&#x56FE;&#x7247;&#x4E0B;&#x8F7D;&#x7EBF;&#x7A0B;&#x5DE5;&#x4F5C;&#xFF0C;&#x7ED3;&#x675F;&#x540E;&#x518D;&#x5F00;&#x59CB;&#xFF0C;&#x53EF;&#x4EE5;&#x63D0;&#x9AD8;ListView&#x7684;&#x6EDA;&#x52A8;&#x5E73;&#x6ED1;&#x5EA6;&#x3002;
</code></pre>
<h2 id="&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x7B2C;&#x4E09;&#x65B9;&#x6846;&#x67B6;&#x65B9;&#x6848;"><a name="&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x7B2C;&#x4E09;&#x65B9;&#x6846;&#x67B6;&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x7B2C;&#x4E09;&#x65B9;&#x6846;&#x67B6;&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>3.3. &#x5E03;&#x5C40;&#x4F18;&#x5316; &#x7B2C;&#x4E09;&#x65B9;&#x6846;&#x67B6;&#x65B9;&#x6848;</h2>
<pre><code class="lang-text">&#x53EF;&#x4EE5;&#x91C7;&#x7528;&#x4E00;&#x4E9B;&#x7B2C;&#x4E09;&#x65B9;&#x7684;UI&#x5E93;&#xFF0C;&#x4F8B;&#x5982;
1&#x3001;facebook &#x7684;&#x5F02;&#x6B65;&#x5E03;&#x5C40;&#x6846;&#x67B6; Litho

2&#x3001;&#x638C;&#x9605;&#x7684; X2C 
&#x2022;&#x8BFB;&#x53D6;xml&#x5F88;&#x8017;&#x65F6;
&#x2022;&#x9012;&#x5F52;&#x89E3;&#x6790;xml&#x8F83;&#x8017;&#x65F6;
&#x2022;&#x53CD;&#x5C04;&#x751F;&#x6210;&#x5BF9;&#x8C61;&#x7684;&#x8017;&#x65F6;&#x662F;new&#x7684;3&#x500D;&#x4EE5;&#x4E0A;
X2C&#x65B9;&#x6848; &#x5728;&#x7F16;&#x8BD1;&#x751F;&#x6210;APK&#x671F;&#x95F4;&#xFF0C;&#x5C06;&#x9700;&#x8981;&#x7FFB;&#x8BD1;&#x7684;layout&#x7FFB;&#x8BD1;&#x751F;&#x6210;&#x5BF9;&#x5E94;&#x7684;java&#x6587;&#x4EF6;&#xFF0C;
&#x8FD9;&#x6837;&#x5BF9;&#x4E8E;&#x5F00;&#x53D1;&#x4EBA;&#x5458;&#x6765;&#x8BF4;&#x5199;&#x5E03;&#x5C40;&#x8FD8;&#x662F;&#x5199;&#x539F;&#x6765;&#x7684;xml&#xFF0C;
&#x4F46;&#x5BF9;&#x4E8E;&#x7A0B;&#x5E8F;&#x6765;&#x8BF4;&#xFF0C;&#x8FD0;&#x884C;&#x65F6;&#x52A0;&#x8F7D;&#x7684;&#x662F;&#x5BF9;&#x5E94;&#x7684;java&#x6587;&#x4EF6;&#x3002;
</code></pre>
<h2 id="&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x7528;&#x5230;&#x4E86;&#x54EA;&#x4E9B;&#x5DE5;&#x5177;"><a name="&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x7528;&#x5230;&#x4E86;&#x54EA;&#x4E9B;&#x5DE5;&#x5177;" class="anchor-navigation-ex-anchor" href="#&#x5E03;&#x5C40;&#x4F18;&#x5316;-&#x7528;&#x5230;&#x4E86;&#x54EA;&#x4E9B;&#x5DE5;&#x5177;"><i class="fa fa-link" aria-hidden="true"></i></a>3.4. &#x5E03;&#x5C40;&#x4F18;&#x5316; &#x7528;&#x5230;&#x4E86;&#x54EA;&#x4E9B;&#x5DE5;&#x5177;</h2>
<pre><code class="lang-text">1&#x3001;&#x7EBF;&#x4E0B;&#x5DE5;&#x5177; LayoutInspector &#x3001; Systrace

2&#x3001;&#x5229;&#x7528; &#x7CFB;&#x7EDF; api Choreographer &#x7684; FrameCallback &#x56DE;&#x8C03;&#x63A5;&#x53E3; &#x76D1;&#x63A7; fps &#xFF0C;&#x7136;&#x540E;&#x4E0A;&#x4F20;&#x5230;&#x81EA;&#x5DF1;&#x670D;&#x52A1;&#x5668;&#x3002;
fpsviewer &#x5C31;&#x662F;&#x57FA;&#x4E8E; Choreographer &#x5F00;&#x53D1;&#x7684;&#x3002;
&#x6B64;&#x5916;&#x6211;&#x4EEC;&#x8FD8;&#x53EF;&#x4EE5;&#x7528;&#x7B2C;&#x4E09;&#x65B9;&#x7684;&#x76D1;&#x63A7;&#x670D;&#x52A1; &#xFF0C;&#x4F8B;&#x5982; &#x5FAE;&#x4FE1;&#x7684; matrix &#x3002;
</code></pre>
<h2 id="&#x5E03;&#x5C40;&#x4E3A;&#x4EC0;&#x4E48;&#x53EF;&#x80FD;&#x4F1A;&#x5361;&#x987F;&#xFF0C;&#x4F60;&#x53C8;&#x662F;&#x5982;&#x4F55;&#x4F18;&#x5316;&#x7684;&#xFF1F;"><a name="&#x5E03;&#x5C40;&#x4E3A;&#x4EC0;&#x4E48;&#x53EF;&#x80FD;&#x4F1A;&#x5361;&#x987F;&#xFF0C;&#x4F60;&#x53C8;&#x662F;&#x5982;&#x4F55;&#x4F18;&#x5316;&#x7684;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x5E03;&#x5C40;&#x4E3A;&#x4EC0;&#x4E48;&#x53EF;&#x80FD;&#x4F1A;&#x5361;&#x987F;&#xFF0C;&#x4F60;&#x53C8;&#x662F;&#x5982;&#x4F55;&#x4F18;&#x5316;&#x7684;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>3.5. &#x5E03;&#x5C40;&#x4E3A;&#x4EC0;&#x4E48;&#x53EF;&#x80FD;&#x4F1A;&#x5361;&#x987F;&#xFF0C;&#x4F60;&#x53C8;&#x662F;&#x5982;&#x4F55;&#x4F18;&#x5316;&#x7684;&#xFF1F;</h2>
<pre><code class="lang-text">&#x4EE5;&#x4E0B;&#x56DB;&#x70B9;&#x53EF;&#x80FD;&#x4F1A;&#x5BFC;&#x81F4;&#x5E03;&#x5C40;&#x5361;&#x987F;&#xFF1A;
1&#x3001;&#x7CFB;&#x7EDF;&#x4F1A;&#x5C06;&#x6211;&#x4EEC;&#x7684;Xml&#x6587;&#x4EF6;&#x901A;&#x8FC7;IO&#x7684;&#x65B9;&#x5F0F;&#x6620;&#x5C04;&#x7684;&#x65B9;&#x5F0F;&#x52A0;&#x8F7D;&#x5230;&#x6211;&#x4EEC;&#x7684;&#x5185;&#x5B58;&#x5F53;&#x4E2D;&#xFF0C;&#x800C;IO&#x7684;&#x8FC7;&#x7A0B;&#x53EF;&#x80FD;&#x4F1A;&#x5BFC;&#x81F4;&#x5361;&#x987F;&#x3002;
&#x9488;&#x5BF9;&#x5E03;&#x5C40;&#x52A0;&#x8F7D;Xml&#x6587;&#x4EF6;&#x7684;&#x4F18;&#x5316;&#xFF0C;&#x6211;&#x4EEC;&#x4F7F;&#x7528;&#x4E86;&#x5F02;&#x6B65;Inflate&#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x5373; AsyncLayoutInflater&#x3002;
&#x5B83;&#x7684;&#x6838;&#x5FC3;&#x539F;&#x7406;&#x662F;&#x5728;&#x5B50;&#x7EBF;&#x7A0B;&#x4E2D;&#x5BF9;&#x6211;&#x4EEC;&#x7684;Layout&#x8FDB;&#x884C;&#x52A0;&#x8F7D;&#xFF0C;&#x800C;&#x52A0;&#x8F7D;&#x5B8C;&#x6210;&#x4E4B;&#x540E;&#x4F1A;&#x5C06;View&#x901A;&#x8FC7;Handler&#x53D1;&#x9001;&#x5230;&#x4E3B;&#x7EBF;&#x7A0B;&#x6765;&#x4F7F;&#x7528;&#x3002;
&#x6240;&#x4EE5;&#x4E0D;&#x4F1A;&#x963B;&#x585E;&#x6211;&#x4EEC;&#x7684;&#x4E3B;&#x7EBF;&#x7A0B;&#xFF0C;&#x52A0;&#x8F7D;&#x7684;&#x65F6;&#x95F4;&#x5168;&#x90E8;&#x662F;&#x5728;&#x5F02;&#x6B65;&#x7EBF;&#x7A0B;&#x4E2D;&#x8FDB;&#x884C;&#x6D88;&#x8017;&#x7684;&#x3002;

2&#x3001;&#x5E03;&#x5C40;&#x52A0;&#x8F7D;&#x7684;&#x8FC7;&#x7A0B;&#x662F;&#x4E00;&#x4E2A;&#x53CD;&#x5C04;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x800C;&#x53CD;&#x5C04;&#x7684;&#x8FC7;&#x7A0B;&#x4E5F;&#x4F1A;&#x53EF;&#x80FD;&#x4F1A;&#x5BFC;&#x81F4;&#x5361;&#x987F;&#x3002;
&#x6211;&#x4EEC;&#x53D1;&#x73B0;&#x4E86;&#x4E00;&#x4E2A;&#x4ECE;&#x6839;&#x6E90;&#x89E3;&#x51B3;&#x4E0A;&#x8FF0;&#x75DB;&#x70B9;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x5373;&#x4F7F;&#x7528;X2C&#x6846;&#x67B6;&#x3002;
&#x5B83;&#x7684;&#x4E00;&#x4E2A;&#x6838;&#x5FC3;&#x539F;&#x7406;&#x5C31;&#x662F;&#x5728;&#x5F00;&#x53D1;&#x8FC7;&#x7A0B;&#x6211;&#x4EEC;&#x8FD8;&#x662F;&#x4F7F;&#x7528;&#x7684;XML&#x8FDB;&#x884C;&#x7F16;&#x5199;&#x5E03;&#x5C40;&#xFF0C;
&#x4F46;&#x662F;&#x5728;&#x7F16;&#x8BD1;&#x7684;&#x65F6;&#x5019;&#x5B83;&#x4F1A;&#x4F7F;&#x7528;APT&#x7684;&#x65B9;&#x5F0F;&#x5C06;XML&#x5E03;&#x5C40;&#x8F6C;&#x6362;&#x4E3A;Java&#x7684;&#x65B9;&#x5F0F;&#x8FDB;&#x884C;&#x5E03;&#x5C40;&#xFF0C;
&#x901A;&#x8FC7;&#x8FD9;&#x6837;&#x7684;&#x65B9;&#x5F0F;&#x53BB;&#x5199;&#x5E03;&#x5C40;&#xFF0C;&#x5B83;&#x6709;&#x4EE5;&#x4E0B;&#x4F18;&#x70B9;&#xFF1A;
&#x2460;&#x3001;&#x5B83;&#x7701;&#x53BB;&#x4E86;&#x4F7F;&#x7528;IO&#x7684;&#x65B9;&#x5F0F;&#x53BB;&#x52A0;&#x8F7D;XML&#x5E03;&#x5C40;&#x7684;&#x8017;&#x65F6;&#x8FC7;&#x7A0B;&#x3002;
&#x2461;&#x3001;&#x5B83;&#x662F;&#x91C7;&#x7528;Java&#x4EE3;&#x7801;&#x76F4;&#x63A5;new&#x7684;&#x65B9;&#x5F0F;&#x53BB;&#x521B;&#x5EFA;&#x63A7;&#x4EF6;&#x5BF9;&#x8C61;&#xFF0C;&#x6240;&#x4EE5;&#x5B83;&#x4E5F;&#x6CA1;&#x6709;&#x53CD;&#x5C04;&#x5E26;&#x6765;&#x7684;&#x6027;&#x80FD;&#x635F;&#x8017;&#x3002;
&#x8FD9;&#x6837;&#x5C31;&#x4ECE;&#x6839;&#x672C;&#x4E0A;&#x89E3;&#x51B3;&#x4E86;&#x5E03;&#x5C40;&#x52A0;&#x8F7D;&#x8FC7;&#x7A0B;&#x4E2D;&#x5E26;&#x6765;&#x7684;&#x95EE;&#x9898;&#x3002;

3&#x3001;&#x8FD9;&#x4E2A;&#x5E03;&#x5C40;&#x7684;&#x5C42;&#x7EA7;&#x5982;&#x679C;&#x6BD4;&#x8F83;&#x6DF1;&#xFF0C;&#x90A3;&#x4E48;&#x8FDB;&#x884C;&#x5E03;&#x5C40;&#x904D;&#x5386;&#x7684;&#x8FC7;&#x7A0B;&#x5C31;&#x4F1A;&#x6BD4;&#x8F83;&#x8017;&#x65F6;&#x3002;
&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; ConstraintLayout &#x53BB;&#x51CF;&#x5C11;&#x6211;&#x4EEC;&#x754C;&#x9762;&#x5E03;&#x5C40;&#x7684;&#x5D4C;&#x5957;&#x5C42;&#x7EA7;&#xFF0C;&#x5982;&#x679C;&#x539F;&#x59CB;&#x5E03;&#x5C40;&#x5C42;&#x7EA7;&#x8D8A;&#x6DF1;&#xFF0C;
&#x5B83;&#x80FD;&#x51CF;&#x5C11;&#x7684;&#x5C42;&#x7EA7;&#x5C31;&#x8D8A;&#x591A;&#x3002;&#x800C;&#x4F7F;&#x7528;&#x5B83;&#x4E5F;&#x80FD;&#x907F;&#x514D;&#x5D4C;&#x5957;RelativeLayout&#x5E03;&#x5C40;&#x5BFC;&#x81F4;&#x7684;&#x91CD;&#x7ED8;&#x6B21;&#x6570;&#x8FC7;&#x591A;&#x3002;

4&#x3001;&#x6700;&#x540E;&#xFF0C;&#x4E0D;&#x5408;&#x7406;&#x7684;&#x5D4C;&#x5957;RelativeLayout&#x5E03;&#x5C40;&#x4E5F;&#x4F1A;&#x5BFC;&#x81F4;&#x91CD;&#x7ED8;&#x7684;&#x6B21;&#x6570;&#x8FC7;&#x591A;&#x3002;
&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; AspectJ &#x6846;&#x67B6;&#xFF08;&#x5373;AOP&#xFF09;&#x548C; LayoutInflaterCompat.setFactory2 
&#x7684;&#x65B9;&#x5F0F;&#x5206;&#x522B;&#x53BB;&#x5EFA;&#x7ACB;&#x7EBF;&#x4E0B;&#x5168;&#x5C40;&#x7684;&#x5E03;&#x5C40;&#x52A0;&#x8F7D;&#x901F;&#x5EA6;&#x548C;&#x63A7;&#x4EF6;&#x52A0;&#x8F7D;&#x901F;&#x5EA6;&#x7684;&#x76D1;&#x63A7;&#x4F53;&#x7CFB;&#x3002;
&#x53D1;&#x73B0;&#x4E0D;&#x5408;&#x7406;&#x7684;&#x5D4C;&#x5957;&#x4ECE;&#x800C;&#x8FDB;&#x884C;&#x4F18;&#x5316;&#x3002;
</code></pre>
<h2 id="&#x505A;&#x5B8C;&#x5E03;&#x5C40;&#x4F18;&#x5316;&#x6709;&#x54EA;&#x4E9B;&#x6210;&#x679C;&#x4EA7;&#x51FA;&#xFF1F;"><a name="&#x505A;&#x5B8C;&#x5E03;&#x5C40;&#x4F18;&#x5316;&#x6709;&#x54EA;&#x4E9B;&#x6210;&#x679C;&#x4EA7;&#x51FA;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#&#x505A;&#x5B8C;&#x5E03;&#x5C40;&#x4F18;&#x5316;&#x6709;&#x54EA;&#x4E9B;&#x6210;&#x679C;&#x4EA7;&#x51FA;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>3.6. &#x505A;&#x5B8C;&#x5E03;&#x5C40;&#x4F18;&#x5316;&#x6709;&#x54EA;&#x4E9B;&#x6210;&#x679C;&#x4EA7;&#x51FA;&#xFF1F;</h2>
<pre><code class="lang-text">1&#x3001;&#x9996;&#x5148;&#xFF0C;&#x6211;&#x4EEC;&#x5EFA;&#x7ACB;&#x4E86;&#x4E00;&#x4E2A;&#x4F53;&#x7CFB;&#x5316;&#x7684;&#x76D1;&#x63A7;&#x624B;&#x6BB5;&#xFF0C;
&#x9488;&#x5BF9;&#x7EBF;&#x4E0B;&#xFF0C;&#x6211;&#x4EEC;&#x4F7F;&#x7528;AOP&#x6216;&#x8005;ARTHook&#xFF0C;&#x53EF;&#x4EE5;&#x5F88;&#x65B9;&#x4FBF;&#x5730;&#x83B7;&#x53D6;&#x5230;&#x6BCF;&#x4E00;&#x4E2A;&#x5E03;&#x5C40;&#x7684;&#x52A0;&#x8F7D;&#x8017;&#x65F6;&#x4EE5;&#x53CA;&#x6BCF;&#x4E00;&#x4E2A;&#x63A7;&#x4EF6;&#x7684;&#x52A0;&#x8F7D;&#x8017;&#x65F6;&#x3002;
&#x9488;&#x5BF9;&#x7EBF;&#x4E0A;&#xFF0C;&#x6211;&#x4EEC;&#x901A;&#x8FC7; Choreographer.getInstance().postFrameCallback&#x7684;&#x65B9;&#x5F0F;&#x6536;&#x96C6;&#x5230;&#x4E86;FPS&#xFF0C;
&#x8FD9;&#x6837;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x77E5;&#x9053;&#x7528;&#x6237;&#x5728;&#x54EA;&#x4E9B;&#x754C;&#x9762;&#x51FA;&#x73B0;&#x4E86;&#x4E22;&#x5E27;&#x7684;&#x60C5;&#x51B5;&#x3002;

2&#x3001;&#x5728;&#x6BCF;&#x4E00;&#x4E2A;&#x7248;&#x672C;&#x4E0A;&#x7EBF;&#x4E4B;&#x524D;&#xFF0C;&#x6211;&#x4EEC;&#x90FD;&#x4F1A;&#x5BF9;&#x6211;&#x4EEC;&#x7684;&#x6838;&#x5FC3;&#x8DEF;&#x5F84;&#x8FDB;&#x884C;&#x4E00;&#x6B21;Review&#xFF0C;
&#x786E;&#x4FDD;&#x6211;&#x4EEC;&#x7684;FPS&#x3001;&#x5E03;&#x5C40;&#x52A0;&#x8F7D;&#x65F6;&#x95F4;&#x3001;&#x5E03;&#x5C40;&#x5C42;&#x7EA7;&#x7B49;&#x8FBE;&#x5230;&#x4E00;&#x4E2A;&#x5408;&#x7406;&#x7684;&#x72B6;&#x6001;&#x3002;
</code></pre>
<h2 id="merge-&#x6807;&#x7B7E;"><a name="merge-&#x6807;&#x7B7E;" class="anchor-navigation-ex-anchor" href="#merge-&#x6807;&#x7B7E;"><i class="fa fa-link" aria-hidden="true"></i></a>3.7. merge &#x6807;&#x7B7E;</h2>
<p>merge &#x7528;&#x6765;&#x5E2E;&#x52A9;&#x5728;&#x89C6;&#x56FE;&#x6811;&#x4E2D;&#x51CF;&#x5C11;&#x91CD;&#x590D;&#x5E03;&#x5C40;&#x3002;</p>
<pre><code class="lang-text">1&#x3001; &#x6CA1;&#x6709;&#x4F7F;&#x7528; merge 
// layout1.xml
&lt;FrameLayout&gt;
   &lt;include layout=&quot;@layout/layout2&quot;/&gt;
&lt;/FrameLayout&gt;

// layout2.xml
&lt;FrameLayout&gt;
   &lt;TextView /&gt;
&lt;/FrameLayout&gt;

// &#x6700;&#x7EC8;&#x7684;&#x6548;&#x679C;&#x4E3A;
&lt;FrameLayout&gt;
   &lt;FrameLayout&gt;  // &#x8FD9;&#x91CC;&#x6709;&#x5197;&#x4F59;&#x7684;&#x4E00;&#x5C42;&#xFF0C;&#x53EF;&#x4EE5;&#x4F18;&#x5316;
      &lt;TextView /&gt;
   &lt;/FrameLayout&gt;
&lt;/FrameLayout&gt;

2&#x3001;&#x4F7F;&#x7528; merge 
// layout1.xml
&lt;FrameLayout&gt;
   &lt;include layout=&quot;@layout/layout2&quot;/&gt;
&lt;/FrameLayout&gt;

// layout2.xml
&lt;merge&gt;
   &lt;TextView /&gt;
&lt;/merge&gt;
// &#x6700;&#x7EC8;&#x7684;&#x6548;&#x679C;&#x4E3A;
&lt;FrameLayout&gt;
   &lt;TextView /&gt;
&lt;/FrameLayout&gt;

// &#x5176;&#x4ED6;
1&#x3001;merge &#x5FC5;&#x987B;&#x653E;&#x5728;&#x5E03;&#x5C40;&#x6587;&#x4EF6;&#x7684;&#x6839;&#x8282;&#x70B9;&#x4E0A;&#x3002;
merge &#x6807;&#x7B7E;&#x88AB;&#x6DFB;&#x52A0;&#x5230;A&#x5BB9;&#x5668;&#x4E0B;&#xFF0C;&#x90A3;&#x4E48; merge &#x4E0B;&#x7684;&#x6240;&#x6709;&#x89C6;&#x56FE;&#x5C06;&#x88AB;&#x6DFB;&#x52A0;&#x5230;A&#x5BB9;&#x5668;&#x4E0B;&#x3002;

2&#x3001;merge &#x5E76;&#x4E0D;&#x662F;&#x4E00;&#x4E2A; ViewGroup &#xFF0C;&#x4E5F;&#x4E0D;&#x662F;&#x4E00;&#x4E2A; View &#xFF0C;&#x5B83;&#x76F8;&#x5F53;&#x4E8E;&#x58F0;&#x660E;&#x4E86;&#x4E00;&#x4E9B;&#x89C6;&#x56FE;&#xFF0C;&#x7B49;&#x5F85;&#x88AB;&#x6DFB;&#x52A0;&#x3002;
merge &#x4E0D;&#x662F; View &#xFF0C;&#x6240;&#x4EE5;&#x5BF9;merge&#x6807;&#x7B7E;&#x8BBE;&#x7F6E;&#x7684;&#x6240;&#x6709;&#x5C5E;&#x6027;&#x90FD;&#x662F;&#x65E0;&#x6548;&#x7684;&#x3002;

3&#x3001; merge &#x6807;&#x7B7E;&#x662F; View&#xFF0C;&#x5728;&#x901A;&#x8FC7; LayoutInflate.inflate &#x65B9;&#x6CD5;&#x6E32;&#x67D3;&#x7684;&#x65F6;&#x5019;&#xFF0C; 
&#x7B2C;&#x4E8C;&#x4E2A;&#x53C2;&#x6570;&#x5FC5;&#x987B;&#x6307;&#x5B9A;&#x4E00;&#x4E2A;&#x7236;&#x5BB9;&#x5668;&#xFF0C;&#x4E14;&#x7B2C;&#x4E09;&#x4E2A;&#x53C2;&#x6570;&#x5FC5;&#x987B;&#x4E3A;true&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x5FC5;&#x987B;&#x4E3A;merge&#x4E0B;&#x7684;&#x89C6;&#x56FE;&#x6307;&#x5B9A;&#x4E00;&#x4E2A;&#x7236;&#x4EB2;&#x8282;&#x70B9;&#x3002;
// View inflate(@LayoutRes int resource, ViewGroup root, boolean attachToRoot)
inflater.inflate(layoutResId, this, true);
</code></pre>
<h1 id="&#x5361;&#x987F;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><a name="&#x5361;&#x987F;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x5361;&#x987F;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>4. &#x5361;&#x987F;&#x4F18;&#x5316; &#xFF08;&#x5B8C;&#x6210;&#xFF09;</h1>
<pre><code class="lang-text">&#x5361;&#x987F;&#x7684;&#x6309;&#x573A;&#x666F;&#x53EF;&#x4EE5;&#x5206;&#x6210;&#xFF1A;UI&#x7ED8;&#x5236;&#x3001;&#x5E94;&#x7528;&#x542F;&#x52A8;&#x3001;&#x9875;&#x9762;&#x8DF3;&#x8F6C;&#x3001;&#x4E8B;&#x4EF6;&#x54CD;&#x5E94;&#x3002;

&#x9020;&#x6210;&#x5361;&#x987F;&#x7684;&#x6839;&#x672C;&#x539F;&#x56E0;&#x53EF;&#x4EE5;&#x5206;&#x4E3A;&#x4E24;&#x5927;&#x7C7B;&#xFF1A;
1&#x3001;&#x754C;&#x9762;&#x7ED8;&#x5236;
&#x9875;&#x9762;&#x590D;&#x6742; &#x3001;&#x7ED8;&#x5236;&#x5C42;&#x7EA7;&#x6DF1; &#x3001;&#x5237;&#x65B0;&#x4E0D;&#x5408;&#x7406;

2&#x3001;&#x6570;&#x636E;&#x5904;&#x7406;
&#x6570;&#x636E;&#x5904;&#x7406;&#x5728;UI&#x7EBF;&#x7A0B; &#x3001;
&#x5360;&#x7528;CPU&#x9AD8;&#xFF0C;&#x5BFC;&#x81F4;&#x4E3B;&#x7EBF;&#x7A0B;&#x62FF;&#x4E0D;&#x5230;&#x65F6;&#x95F4;&#x7247;
&#x5185;&#x5B58;&#x589E;&#x52A0;&#x5BFC;&#x81F4;GC&#x9891;&#x7E41;&#xFF0C;&#x4ECE;&#x800C;&#x5F15;&#x8D77;&#x5361;&#x987F;
</code></pre>
<h2 id="ui&#x6D41;&#x7545;&#x5EA6;&#x4F18;&#x5316;-&#x3001;&#x754C;&#x9762;&#x5361;&#x987F;-&#x6392;&#x67E5;&#x53CA;&#x4F18;&#x5316;"><a name="ui&#x6D41;&#x7545;&#x5EA6;&#x4F18;&#x5316;-&#x3001;&#x754C;&#x9762;&#x5361;&#x987F;-&#x6392;&#x67E5;&#x53CA;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#ui&#x6D41;&#x7545;&#x5EA6;&#x4F18;&#x5316;-&#x3001;&#x754C;&#x9762;&#x5361;&#x987F;-&#x6392;&#x67E5;&#x53CA;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>4.1. UI&#x6D41;&#x7545;&#x5EA6;&#x4F18;&#x5316; &#x3001;&#x754C;&#x9762;&#x5361;&#x987F; &#x6392;&#x67E5;&#x53CA;&#x4F18;&#x5316;</h2>
<p>Skipped 60 frames!  The application may be doing too much work on its main thread.</p>
<pre><code class="lang-text">&#x5728;&#x5927;&#x90E8;&#x5206;Android&#x5E73;&#x53F0;&#x7684;&#x8BBE;&#x5907;&#x4E0A;&#xFF0C;Android&#x7CFB;&#x7EDF;&#x662F; 16ms (1000 /60 = 16.67 ) &#x5237;&#x65B0;&#x4E00;&#x6B21;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x4E00;&#x79D2;&#x949F;60&#x5E27;&#x3002; 
&#x8981;&#x8FBE;&#x5230;&#x8FD9;&#x79CD;&#x5237;&#x65B0;&#x901F;&#x5EA6;&#x5C31;&#x8981;&#x6C42;&#x5728;ui&#x7EBF;&#x7A0B;&#x4E2D;&#x5904;&#x7406;&#x7684;&#x4EFB;&#x52A1;&#x65F6;&#x95F4;&#x5FC5;&#x987B;&#x8981;&#x5C0F;&#x4E8E;16ms&#xFF0C;&#x5982;&#x679C;ui&#x7EBF;&#x7A0B;&#x4E2D;&#x5904;&#x7406;&#x65F6;&#x95F4;&#x957F;&#xFF0C;
&#x5C31;&#x4F1A;&#x5BFC;&#x81F4;&#x8DF3;&#x8FC7;&#x5E27;&#x7684;&#x6E32;&#x67D3;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x5BFC;&#x81F4;&#x754C;&#x9762;&#x770B;&#x8D77;&#x6765;&#x4E0D;&#x6D41;&#x7545;&#xFF0C;&#x5361;&#x987F;&#x3002;
</code></pre>
<h2 id="&#x5361;&#x987F;&#x5F15;&#x8D77;&#x7684;&#x5177;&#x4F53;&#x539F;&#x56E0;"><a name="&#x5361;&#x987F;&#x5F15;&#x8D77;&#x7684;&#x5177;&#x4F53;&#x539F;&#x56E0;" class="anchor-navigation-ex-anchor" href="#&#x5361;&#x987F;&#x5F15;&#x8D77;&#x7684;&#x5177;&#x4F53;&#x539F;&#x56E0;"><i class="fa fa-link" aria-hidden="true"></i></a>4.2. &#x5361;&#x987F;&#x5F15;&#x8D77;&#x7684;&#x5177;&#x4F53;&#x539F;&#x56E0;</h2>
<pre><code class="lang-text">1&#x3001;cpu &#x5360;&#x7528;&#x8FC7;&#x9AD8;&#xFF0C;&#x5BB9;&#x6613;&#x5361;&#x987F; &#x3002;&#x4E00;&#x822C;&#x662F; &#x540E;&#x53F0;&#x7EBF;&#x7A0B;&#x5904;&#x7406;&#x7684;&#x4E1C;&#x897F;&#x592A;&#x7E41;&#x5FD9;&#x3002;
&#x6CE8;&#x610F;&#x903B;&#x8F91;&#x7684;&#x4F18;&#x5316;&#xFF0C;&#x7EBF;&#x7A0B;&#x4E0D;&#x8981;&#x7A7A;&#x8DD1;&#x3002;

2&#x3001;&#x4E3B;&#x7EBF;&#x7A0B; &#x7ED8;&#x5236;&#x65F6;&#x95F4;&#x8FC7;&#x957F;&#x3002;
UI&#x7684;&#x5C42;&#x7EA7;&#x522B;&#x592A;&#x5927; &#xFF0C;&#x4E0D;&#x8981;&#x5197;&#x4F59;&#x5D4C;&#x5957;
</code></pre>
<h2 id="&#x5361;&#x987F;&#x68C0;&#x6D4B;-choreographer"><a name="&#x5361;&#x987F;&#x68C0;&#x6D4B;-choreographer" class="anchor-navigation-ex-anchor" href="#&#x5361;&#x987F;&#x68C0;&#x6D4B;-choreographer"><i class="fa fa-link" aria-hidden="true"></i></a>4.3. &#x5361;&#x987F;&#x68C0;&#x6D4B; Choreographer</h2>
<pre><code class="lang-text">&#x4F7F;&#x7528; Androidstudio &#x81EA;&#x5E26;&#x7684; &#x5DE5;&#x5177;&#xFF0C;&#x548C;&#x4E00;&#x4E9B;&#x7B2C;&#x4E09;&#x65B9;&#x7684;&#x76D1;&#x63A7;&#x5DE5;&#x5177; &#x4F8B;&#x5982; BlockCanary &#x5C31;&#x5DEE;&#x4E0D;&#x591A;&#x4E86;&#x3002;

// FPS ( Frames Per Second )
&#x5373; Frame Rate&#xFF0C;&#x5355;&#x4F4D; fps&#xFF0C;&#x662F;&#x6307; gpu &#x751F;&#x6210;&#x5E27;&#x7684;&#x901F;&#x7387; &#xFF0C;Android&#x4E2D;&#x66F4;&#x5E27;&#x7387;&#x76F8;&#x5173;&#x7684;&#x7C7B;&#x662F; SurfaceFlinger &#x3002;
SurfaceFlinger (SurfaceFlinger.h) &#x662F;Android&#x7684;&#x4E00;&#x4E2A; native&#x8FDB;&#x7A0B; &#xFF0C;
&#x63A5;&#x53D7;&#x591A;&#x4E2A;&#x6765;&#x6E90;&#x7684;&#x56FE;&#x5F62;&#x663E;&#x793A;&#x6570;&#x636E;&#xFF0C;&#x5C06;&#x4ED6;&#x4EEC;&#x5408;&#x6210;&#xFF0C;&#x7136;&#x540E;&#x53D1;&#x9001;&#x5230;&#x663E;&#x793A;&#x8BBE;&#x5907;&#x3002;

// VSync (Synchronization ) ,&#x5782;&#x76F4;&#x540C;&#x6B65; &#x4FE1;&#x53F7;&#x3002;
Android&#x7CFB;&#x7EDF;&#x6BCF;&#x9694;16ms&#x53D1;&#x51FA; VSync &#x4FE1;&#x53F7;&#xFF0C;&#x89E6;&#x53D1;&#x5BF9;UI&#x8FDB;&#x884C;&#x6E32;&#x67D3;&#xFF0C;
Android 4.1 &#x5F00;&#x59CB;&#x5F15;&#x5165; VSync &#x673A;&#x5236;&#xFF0C;&#x7528;&#x6765;&#x540C;&#x6B65;&#x6E32;&#x67D3;&#xFF0C;
&#x8BA9; UI &#x548C; SurfaceFlinger &#x53EF;&#x4EE5;&#x6309;&#x786C;&#x4EF6;&#x4EA7;&#x751F;&#x7684; VSync &#x8282;&#x594F;&#x8FDB;&#x884C;&#x5DE5;&#x4F5C;&#x3002;

WkHeartBeatTool wkHeartBeatTool =  new WkHeartBeatTool();
wkHeartBeatTool.startTheBeatAction(new HeartBeatTask() {
    @Override
    public void run() {
        // &#x4E00;&#x79D2;&#x949F;&#x7EDF;&#x8BA1;&#x4E00;&#x6B21; &#xFF0C;&#x5982;&#x679C;&#x5C0F;&#x4E8E; 60 &#xFF0C;&#x5C31;&#x8BF4;&#x660E;&#x6389;&#x5E27;&#x4E86;
        WkLogTool.showLog(&quot;fps====&quot;+count);
        count= 0 ;
    }
} ,1000);

// Choreographer &#x7F16;&#x821E;&#x8005; &#xFF0C;&#x7EDF;&#x8BA1;&#x4E00;&#x79D2;&#x5185; count &#x7684;&#x6570;&#x91CF; &#xFF0C;
Choreographer.getInstance()
        .postFrameCallback( new Choreographer.FrameCallback() {
            // frameTimeNanos: The time in nanoseconds when the frame started being rendered,
            @Override
            public void doFrame(long frameTimeNanos) {
                count++ ;
                Choreographer.getInstance().postFrameCallback(this);
            }
        });
</code></pre>
<h2 id="&#x6392;&#x67E5;-&#x7EBF;&#x4E0A;app-&#x7528;&#x6237;&#x53CD;&#x9988;&#x5361;&#x987F;&#x7684;&#x95EE;&#x9898;"><a name="&#x6392;&#x67E5;-&#x7EBF;&#x4E0A;app-&#x7528;&#x6237;&#x53CD;&#x9988;&#x5361;&#x987F;&#x7684;&#x95EE;&#x9898;" class="anchor-navigation-ex-anchor" href="#&#x6392;&#x67E5;-&#x7EBF;&#x4E0A;app-&#x7528;&#x6237;&#x53CD;&#x9988;&#x5361;&#x987F;&#x7684;&#x95EE;&#x9898;"><i class="fa fa-link" aria-hidden="true"></i></a>4.4. &#x6392;&#x67E5; &#x7EBF;&#x4E0A;App ,&#x7528;&#x6237;&#x53CD;&#x9988;&#x5361;&#x987F;&#x7684;&#x95EE;&#x9898;</h2>
<pre><code class="lang-text">1&#x3001;&#x8BB0;&#x5F55;&#x7528;&#x6237;&#x7684;&#x4F7F;&#x7528;&#x673A;&#x578B;&#x548C;&#x4F7F;&#x7528;&#x573A;&#x666F;&#x3002;&#x4F8B;&#x5982;&#x64CD;&#x4F5C;&#x6D41;&#x7A0B;&#x3001;&#x7F51;&#x7EDC;&#x73AF;&#x5883;
2&#x3001;&#x52A0;&#x5165;&#x5361;&#x987F;&#x68C0;&#x6D4B;&#x673A;&#x5236;&#xFF0C;&#x6709;&#x7B2C;&#x4E09;&#x65B9;&#x7684; SDK &#x4E5F;&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x5199; &#xFF0C;
&#x5C06;&#x5361;&#x987F;&#x65F6;&#x7684;&#x5806;&#x6808;&#x4FE1;&#x606F;&#x8BB0;&#x5F55;&#x5E76;&#x56DE;&#x4F20;&#xFF0C;&#x5B9A;&#x4F4D;&#x5206;&#x6790;&#x3002;
</code></pre>
<h1 id="&#x542F;&#x52A8;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><a name="&#x542F;&#x52A8;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x542F;&#x52A8;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>5. &#x542F;&#x52A8;&#x4F18;&#x5316; &#xFF08;&#x5B8C;&#x6210;&#xFF09;</h1>
<p>&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x662F;&#x7528;&#x6237;&#x5BF9;&#x6211;&#x4EEC;App&#x7684;&#x7B2C;&#x4E00;&#x4F53;&#x9A8C;&#xFF0C;&#x5982;&#x679C;&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x8FC7;&#x6162;&#xFF0C;&#x7528;&#x6237;&#x7B2C;&#x4E00;&#x5370;&#x8C61;&#x5C31;&#x4F1A;&#x5F88;&#x5DEE;&#x3002;</p>
<h2 id="&#x542F;&#x52A8;&#x5361;&#x987F;&#x5E38;&#x89C1;&#x73B0;&#x8C61;"><a name="&#x542F;&#x52A8;&#x5361;&#x987F;&#x5E38;&#x89C1;&#x73B0;&#x8C61;" class="anchor-navigation-ex-anchor" href="#&#x542F;&#x52A8;&#x5361;&#x987F;&#x5E38;&#x89C1;&#x73B0;&#x8C61;"><i class="fa fa-link" aria-hidden="true"></i></a>5.1. &#x542F;&#x52A8;&#x5361;&#x987F;&#x5E38;&#x89C1;&#x73B0;&#x8C61;</h2>
<pre><code class="lang-text">1&#x3001;&#x70B9;&#x51FB;&#x56FE;&#x6807;&#x5F88;&#x4E45;&#x90FD;&#x4E0D;&#x54CD;&#x5E94;
&#x8FD9;&#x662F;&#x56E0;&#x4E3A;&#x9884;&#x89C8;&#x7A97;&#x53E3;&#x88AB;&#x7981;&#x7528;&#x6216;&#x8BBE;&#x7F6E;&#x4E3A;&#x900F;&#x660E;&#x3002;

2&#x3001;&#x9996;&#x9875;&#x663E;&#x793A;&#x592A;&#x6162;
&#x56E0;&#x4E3A;&#x521D;&#x59CB;&#x5316;&#x4EFB;&#x52A1;&#x592A;&#x591A;&#x3002;

3&#x3001;&#x9996;&#x9875;&#x663E;&#x793A;&#x540E;&#x65E0;&#x6CD5;&#x8FDB;&#x884C;&#x64CD;&#x4F5C;
&#x592A;&#x591A;&#x5EF6;&#x8FDF;&#x521D;&#x59CB;&#x5316;&#x4EFB;&#x52A1;&#x5360;&#x7528;&#x4E3B;&#x7EBF;&#x7A0B;CPU&#x65F6;&#x95F4;&#x7247;&#x3002;
</code></pre>
<h2 id="&#x67E5;&#x770B;-app-&#x542F;&#x52A8;&#x8017;&#x65F6;"><a name="&#x67E5;&#x770B;-app-&#x542F;&#x52A8;&#x8017;&#x65F6;" class="anchor-navigation-ex-anchor" href="#&#x67E5;&#x770B;-app-&#x542F;&#x52A8;&#x8017;&#x65F6;"><i class="fa fa-link" aria-hidden="true"></i></a>5.2. &#x67E5;&#x770B; APP &#x542F;&#x52A8;&#x8017;&#x65F6;</h2>
<pre><code class="lang-text">1&#x3001;&#x5728;Android Studio Logcat&#x4E2D;&#x8FC7;&#x6EE4;&#x5173;&#x952E;&#x5B57;&#x201C; Displayed &#x201D; (&#x7EBF;&#x4E0B;&#x4F7F;&#x7528;&#xFF0C;&#x65F6;&#x95F4;&#x7CBE;&#x786E;)
&#x4F1A;&#x6253;&#x5370;&#x51FA;&#x5BF9;&#x5E94;&#x7684; activity &#x542F;&#x52A8;&#x8017;&#x65F6;&#x65F6;&#x95F4; &#x3002;

2&#x3001;&#x7528; adb &#x67E5;&#x770B;  (&#x65F6;&#x95F4;&#x4E0D;&#x662F;&#x7279;&#x522B;&#x7CBE;&#x786E;)
// adb shell am start -W &#x5305;&#x540D;/Activity&#x5168;&#x8DEF;&#x5F84;
adb shell am start -W com.aivin.myapp/com.test.activity.MainActivity
&#x4F1A;&#x6253;&#x5370;&#x51FA;&#x4EE5;&#x4E0B;&#x4E09;&#x4E2A;&#x53C2;&#x6570;
ThisTime: 1138 // &#x6700;&#x540E;&#x4E00;&#x4E2A;Activity&#x542F;&#x52A8;&#x8017;&#x65F6;
TotalTime: 1138  // &#x6240;&#x6709;&#x8017;&#x65F6;&#xFF0C;&#x5305;&#x62EC;&#x521B;&#x5EFA;&#x8FDB;&#x7A0B; + Application&#x521D;&#x59CB;&#x5316; + Activity&#x521D;&#x59CB;&#x5316;&#x5230;&#x754C;&#x9762;&#x663E;&#x793A;&#x7684;&#x8FC7;&#x7A0B;&#x3002;
WaitTime: 1153 // AMS &#x542F;&#x52A8;Activity&#x7684;&#x603B;&#x8017;&#x65F6;, &#x5373;&#x7CFB;&#x7EDF;&#x542F;&#x52A8;&#x5E94;&#x7528;&#x8017;&#x65F6;&#x3002;

3&#x3001; &#x4EE3;&#x7801;&#x6253;&#x70B9;/&#x51FD;&#x6570;&#x63D2;&#x6869; &#xFF08;&#x53EF;&#x63A7;&#x90E8;&#x5206;&#x63D2;&#x5165;&#x65F6;&#x95F4;&#x7EDF;&#x8BA1;&#x4EE3;&#x7801;&#xFF09; 
&#x8FD9;&#x91CC;&#x4E25;&#x683C;&#x8BF4;&#x6765;&#x5E76;&#x4E0D;&#x662F;APP&#x7684;&#x542F;&#x52A8;&#x8017;&#x65F6;&#xFF0C;&#x800C;&#x662F;&#x53EA;&#x80FD;&#x7EDF;&#x8BA1;&#x5230;&#x6838;&#x5FC3;&#x90E8;&#x5206;&#x7684;&#x8017;&#x65F6;&#x64CD;&#x4F5C;&#x3002;

3&#x3001;AOP &#x5207;&#x9762;&#x7F16;&#x7A0B; &#x6253;&#x70B9;
AOP(Aspect Oriented Programming) &#xFF0C;
Android &#x7AEF;&#x6709; &#x7B2C;&#x4E09;&#x65B9;&#x5DE5;&#x5177; AspectJX &#x3002;
&#x5728;android&#x4E2D;&#x914D;&#x7F6E;aspectj&#x6BD4;&#x8F83;&#x9EBB;&#x70E6;&#xFF0C;
&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x53C2;&#x8003;&#x8FD9;&#x4E2A; 
https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx
</code></pre>
<h2 id="&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x5206;&#x6790;&#x5DE5;&#x5177;-&#x2014;-traceview"><a name="&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x5206;&#x6790;&#x5DE5;&#x5177;-&#x2014;-traceview" class="anchor-navigation-ex-anchor" href="#&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x5206;&#x6790;&#x5DE5;&#x5177;-&#x2014;-traceview"><i class="fa fa-link" aria-hidden="true"></i></a>5.3. &#x542F;&#x52A8;&#x901F;&#x5EA6;&#x5206;&#x6790;&#x5DE5;&#x5177; &#x2014; TraceView</h2>
<pre><code class="lang-text">1&#x3001;&#x4F7F;&#x7528;&#x65B9;&#x6CD5;1
&#x4EE3;&#x7801;&#x4E2D;&#x6DFB;&#x52A0;&#xFF1A;Debug.startMethodTracing()&#x3001;&#x68C0;&#x6D4B;&#x65B9;&#x6CD5;&#x3001;Debug.stopMethodTracing()&#x3002;
&#x8FD0;&#x884C;&#x8FC7;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x540E;&#xFF0C;&#x5C06;&#x751F;&#x6210;&#x7684; .trace &#x5BFC;&#x51FA;&#x5230;&#x7535;&#x8111;&#xFF0C;
&#x7136;&#x540E;&#x7528; Android Studio&#x7684; Profiler &#x8FDB;&#x884C;&#x52A0;&#x8F7D;&#x540E;&#x8FDB;&#x884C;&#x5206;&#x6790;&#x3002;
load from file...

2&#x3001;&#x6216;&#x8005;&#x76F4;&#x63A5;&#x5C06;&#x624B;&#x673A;&#x8FDE;&#x63A5;&#x4E0A;&#x7535;&#x8111;&#xFF0C;&#x76F4;&#x63A5;&#x8C03;&#x8BD5;&#xFF0C;&#x7528; Android Studio&#x7684; Profiler &#x8FDB;&#x884C;&#x5B9E;&#x65F6;&#x67E5;&#x770B;&#x3002;
&#x6253;&#x5F00; Profiler  -&gt;  CPU   -&gt;    &#x70B9;&#x51FB; Record   -&gt;  &#x70B9;&#x51FB; Stop  -&gt;  
&#x67E5;&#x770B;Profiler&#x4E0B;&#x65B9;Top Down/Bottom Up &#x533A;&#x57DF;&#xFF0C;&#x4EE5;&#x627E;&#x51FA;&#x8017;&#x65F6;&#x7684;&#x70ED;&#x70B9;&#x65B9;&#x6CD5;&#x3002;
</code></pre>
<h2 id="&#x51B7;&#x542F;&#x52A8;"><a name="&#x51B7;&#x542F;&#x52A8;" class="anchor-navigation-ex-anchor" href="#&#x51B7;&#x542F;&#x52A8;"><i class="fa fa-link" aria-hidden="true"></i></a>5.4. &#x51B7;&#x542F;&#x52A8;</h2>
<pre><code class="lang-text">&#x51B7;&#x542F;&#x52A8;&#x5C31;&#x662F;&#x4ECE;0&#x5F00;&#x59CB;&#x542F;&#x52A8; App &#x3002;
&#x4ECE;&#x70B9;&#x51FB;&#x5E94;&#x7528;&#x56FE;&#x6807;&#x5230;UI&#x754C;&#x9762;&#x5B8C;&#x5168;&#x663E;&#x793A;&#x4E14;&#x7528;&#x6237;&#x53EF;&#x64CD;&#x4F5C;&#x7684;&#x5168;&#x90E8;&#x8FC7;&#x7A0B;&#x3002;

&#x7528;&#x6237;&#x8FDB;&#x884C;&#x4E86;&#x4E00;&#x4E2A;&#x70B9;&#x51FB;&#x64CD;&#x4F5C;&#xFF0C;&#x8FD9;&#x4E2A;&#x70B9;&#x51FB;&#x4E8B;&#x4EF6;&#x5B83;&#x4F1A;&#x89E6;&#x53D1;&#x4E00;&#x4E2A; IPC &#x7684;&#x64CD;&#x4F5C;&#xFF0C;
&#x4E4B;&#x540E;&#x4FBF;&#x4F1A;&#x6267;&#x884C;&#x5230; Process &#x7684; start &#x65B9;&#x6CD5;&#x4E2D;&#xFF0C;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x662F;&#x7528;&#x4E8E;&#x8FDB;&#x7A0B;&#x521B;&#x5EFA;&#x7684;&#xFF0C;
&#x63A5;&#x7740;&#x4FBF;&#x4F1A;&#x6267;&#x884C;&#x5230; ActivityThread &#x7684; main &#x65B9;&#x6CD5;&#xFF0C;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x53EF;&#x4EE5;&#x770B;&#x505A;&#x662F;&#x6211;&#x4EEC;&#x5355;&#x4E2A;App&#x8FDB;&#x7A0B;&#x7684;&#x5165;&#x53E3;&#xFF0C;
&#x76F8;&#x5F53;&#x4E8E;Java&#x8FDB;&#x7A0B;&#x7684;main&#x65B9;&#x6CD5;&#xFF0C;&#x5728;&#x5176;&#x4E2D;&#x4F1A;&#x6267;&#x884C;&#x6D88;&#x606F;&#x5FAA;&#x73AF;&#x7684;&#x521B;&#x5EFA;&#x4E0E;&#x4E3B;&#x7EBF;&#x7A0B; Handler &#x7684;&#x521B;&#x5EFA;&#xFF0C;
&#x521B;&#x5EFA;&#x5B8C;&#x6210;&#x4E4B;&#x540E;&#xFF0C;&#x5C31;&#x4F1A;&#x6267;&#x884C;&#x5230; bindApplication &#x65B9;&#x6CD5;&#xFF0C;&#x5728;&#x8FD9;&#x91CC;&#x4F7F;&#x7528;&#x4E86;&#x53CD;&#x5C04;&#x53BB;&#x521B;&#x5EFA; Application 
&#x4EE5;&#x53CA;&#x8C03;&#x7528;&#x4E86; Application&#x76F8;&#x5173;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF0C;Application&#x7ED3;&#x675F;&#x4E4B;&#x540E;&#xFF0C;
&#x4FBF;&#x4F1A;&#x6267;&#x884C;Activity&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF0C;&#x5728;Activity&#x751F;&#x547D;&#x5468;&#x671F;&#x7ED3;&#x675F;&#x4E4B;&#x540E;&#xFF0C;
&#x6700;&#x540E;&#xFF0C;&#x5C31;&#x4F1A;&#x6267;&#x884C;&#x5230; ViewRootImpl&#xFF0C;&#x8FD9;&#x65F6;&#x624D;&#x4F1A;&#x8FDB;&#x884C;&#x771F;&#x6B63;&#x7684;&#x4E00;&#x4E2A;&#x9875;&#x9762;&#x7684;&#x7ED8;&#x5236;&#x3002;

// &#x51B7;&#x542F;&#x52A8;&#x6D89;&#x53CA;&#x7684;&#x76F8;&#x5173;&#x4EFB;&#x52A1;
 -&gt;  &#x542F;&#x52A8;App  -&gt;  &#x52A0;&#x8F7D;&#x7A7A;&#x767D;Window  -&gt; &#x521B;&#x5EFA;&#x8FDB;&#x7A0B;
 -&gt;  &#x521B;&#x5EFA;Application -&gt;  &#x542F;&#x52A8;&#x4E3B;&#x7EBF;&#x7A0B;  -&gt;  &#x521B;&#x5EFA; MainActivity
 -&gt;  &#x52A0;&#x8F7D;&#x5E03;&#x5C40; -&gt;  &#x5E03;&#x7F6E;&#x5C4F;&#x5E55;  -&gt; &#x9996;&#x5E27;&#x7ED8;&#x5236;
&#x901A;&#x5E38;&#x5230;&#x4E86;&#x754C;&#x9762;&#x9996;&#x5E27;&#x7ED8;&#x5236;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x5C31;&#x53EF;&#x4EE5;&#x8BA4;&#x4E3A;&#x542F;&#x52A8;&#x5DF2;&#x7ECF;&#x7ED3;&#x675F;&#x4E86;&#x3002;
</code></pre>
<h3 id="&#x51B7;&#x542F;&#x52A8;&#x4F18;&#x5316;"><a name="&#x51B7;&#x542F;&#x52A8;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x51B7;&#x542F;&#x52A8;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>5.4.1. &#x51B7;&#x542F;&#x52A8;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x4F18;&#x5316;&#x65B9;&#x5411;&#x4E3B;&#x8981;&#x5C31;&#x662F; Application &#x548C; Activity &#x7684;&#x751F;&#x547D;&#x5468;&#x671F; &#x8FD9;&#x4E2A;&#x9636;&#x6BB5;&#x3002;
1&#x3001;Application&#x4E2D;&#x5BF9; &#x7B2C;&#x4E09;&#x65B9;&#x7684;SDK&#x8FDB;&#x884C;&#x5F02;&#x6B65;&#x6216;&#x5EF6;&#x65F6;&#x521D;&#x59CB;&#x5316; &#x3002;
2&#x3001;&#x505A;&#x4E00;&#x4E2A;&#x95EA;&#x5C4F;&#x754C;&#x9762;&#x3002;&#x5728;&#x5C55;&#x793A;&#x7684;&#x8FD9;&#x6BB5;&#x65F6;&#x95F4;&#x91CC;&#xFF0C;&#x53BB;&#x52A0;&#x8F7D;&#x4E0B;&#x4E00;&#x9875;&#x9700;&#x8981;&#x7684;&#x8D44;&#x6E90;&#x3002;
</code></pre>
<h2 id="&#x70ED;&#x542F;&#x52A8;&#x4F18;&#x5316;"><a name="&#x70ED;&#x542F;&#x52A8;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x70ED;&#x542F;&#x52A8;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>5.5. &#x70ED;&#x542F;&#x52A8;&#x4F18;&#x5316;</h2>
<pre><code class="lang-text">&#x76F4;&#x63A5;&#x4ECE;&#x540E;&#x53F0;&#x5207;&#x6362;&#x5230;&#x524D;&#x53F0;&#x3002;

// &#x70ED;&#x542F;&#x52A8;&#x4F18;&#x5316;
&#x5728;app &#x9000;&#x51FA;&#x65F6; &#x4E0D;&#x8981;finish &#xFF0C;&#x800C;&#x662F; moveTaskToBack &#xFF0C;&#x5373;&#x6A21;&#x62DF; HOME&#x6309;&#x952E;&#x7684;&#x4E8B;&#x4EF6; &#x3002;
</code></pre>
<h2 id="&#x6E29;&#x542F;&#x52A8;&#x4F18;&#x5316;"><a name="&#x6E29;&#x542F;&#x52A8;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x6E29;&#x542F;&#x52A8;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>5.6. &#x6E29;&#x542F;&#x52A8;&#x4F18;&#x5316;</h2>
<pre><code class="lang-text">&#x5F53;&#x542F;&#x52A8;&#x5E94;&#x7528;&#x65F6;&#xFF0C;&#x540E;&#x53F0;&#x5DF2;&#x6709;&#x8BE5;&#x5E94;&#x7528;&#x7684;&#x8FDB;&#x7A0B;&#xFF0C;
&#x5728;&#x5DF2;&#x6709;&#x8FDB;&#x7A0B;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x4F1A;&#x4ECE;&#x5DF2;&#x6709;&#x7684;&#x8FDB;&#x7A0B;&#x4E2D;&#x6765;&#x542F;&#x52A8;&#x5E94;&#x7528; &#x3002;
&#x53EA;&#x4F1A;&#x91CD;&#x8D70; Activity &#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#xFF0C;&#x800C;&#x4E0D;&#x4F1A;&#x91CD;&#x8D70;&#x8FDB;&#x7A0B;&#x7684;&#x521B;&#x5EFA;&#xFF0C;
&#x4E5F;&#x4E0D;&#x8D70; Application &#x7684;&#x521B;&#x5EFA;&#x4E0E;&#x751F;&#x547D;&#x5468;&#x671F;&#x7B49;&#x3002;
</code></pre>
<h2 id="&#x542F;&#x52A8;&#x4F18;&#x5316;-&#x65B9;&#x6848;&#x603B;&#x7ED3;"><a name="&#x542F;&#x52A8;&#x4F18;&#x5316;-&#x65B9;&#x6848;&#x603B;&#x7ED3;" class="anchor-navigation-ex-anchor" href="#&#x542F;&#x52A8;&#x4F18;&#x5316;-&#x65B9;&#x6848;&#x603B;&#x7ED3;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7. &#x542F;&#x52A8;&#x4F18;&#x5316; &#x65B9;&#x6848;&#x603B;&#x7ED3;</h2>
<h3 id="&#x95EA;&#x5C4F;&#x9875;&#x4F18;&#x5316;"><a name="&#x95EA;&#x5C4F;&#x9875;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x95EA;&#x5C4F;&#x9875;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.1. &#x95EA;&#x5C4F;&#x9875;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x6D88;&#x9664;&#x542F;&#x52A8;&#x65F6;&#x7684;&#x767D;&#x5C4F;/&#x9ED1;&#x5C4F;&#xFF0C;&#x5E02;&#x9762;&#x4E0A;&#x5927;&#x90E8;&#x5206;App&#x90FD;&#x91C7;&#x7528;&#x4E86;&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#xFF0C;&#x975E;&#x5E38;&#x7B80;&#x5355;&#xFF0C;
&#x4F46;&#x662F;&#x8FD9;&#x53EA;&#x662F;&#x4E00;&#x4E2A;&#x969C;&#x773C;&#x6CD5;&#xFF0C;&#x5E76;&#x4E0D;&#x4F1A;&#x7F29;&#x77ED;&#x5B9E;&#x9645;&#x51B7;&#x542F;&#x52A8;&#x65F6;&#x95F4;&#x3002;
</code></pre>
<h3 id="&#x61D2;&#x52A0;&#x8F7D;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;"><a name="&#x61D2;&#x52A0;&#x8F7D;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;" class="anchor-navigation-ex-anchor" href="#&#x61D2;&#x52A0;&#x8F7D;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.2. &#x61D2;&#x52A0;&#x8F7D;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;</h3>
<pre><code class="lang-text">&#x5BF9;&#x9879;&#x76EE;&#x4E2D;&#x7528;&#x5230;&#x7684;&#x5E93;&#x8FDB;&#x884C;&#x6309;&#x9700;&#x521D;&#x59CB;&#x5316;&#xFF0C;&#x7279;&#x522B;&#x662F;&#x9488;&#x5BF9;&#x4E8E;&#x4E00;&#x4E9B;&#x5E94;&#x7528;&#x542F;&#x52A8;&#x65F6;&#x4E0D;&#x9700;&#x8981;&#x521D;&#x59CB;&#x5316;&#x7684;&#x5E93;&#xFF0C;
&#x53EF;&#x4EE5;&#x7B49;&#x5230;&#x7528;&#x65F6;&#x624D;&#x8FDB;&#x884C;&#x52A0;&#x8F7D;&#xFF0C;&#x51CF;&#x5C11;&#x542F;&#x52A8;&#x65F6;&#x95F4;&#x3002;
</code></pre>
<h3 id="&#x5EF6;&#x8FDF;&#x521D;&#x59CB;&#x5316;"><a name="&#x5EF6;&#x8FDF;&#x521D;&#x59CB;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x5EF6;&#x8FDF;&#x521D;&#x59CB;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.3. &#x5EF6;&#x8FDF;&#x521D;&#x59CB;&#x5316;</h3>
<pre><code class="lang-text">&#x5229;&#x7528; IdleHandler&#x7279;&#x6027; (&#x95F2;&#x65F6;&#x673A;&#x5236;)  &#xFF0C;&#x5728;CPU&#x7A7A;&#x95F2;&#x65F6;&#x6267;&#x884C;&#xFF0C;&#x5BF9;&#x5EF6;&#x8FDF;&#x4EFB;&#x52A1;&#x8FDB;&#x884C;&#x521D;&#x59CB;&#x5316;&#x3002;
</code></pre>
<h3 id="&#x5F02;&#x6B65;&#x521D;&#x59CB;&#x5316;"><a name="&#x5F02;&#x6B65;&#x521D;&#x59CB;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x5F02;&#x6B65;&#x521D;&#x59CB;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.4. &#x5F02;&#x6B65;&#x521D;&#x59CB;&#x5316;</h3>
<pre><code class="lang-text">&#x6838;&#x5FC3;&#x601D;&#x60F3;&#x662F;&#x5B50;&#x7EBF;&#x7A0B;&#x5206;&#x62C5;&#x4E3B;&#x7EBF;&#x7A0B;&#x4EFB;&#x52A1;&#xFF0C;&#x5E76;&#x884C;&#x51CF;&#x5C11;&#x65F6;&#x95F4;&#x3002;
&#x5982;&#x679C;&#x6709;&#x4F9D;&#x8D56;&#x5173;&#x7CFB;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; CountDownLatch &#x6765;&#x63A7;&#x5236;&#x7B49;&#x5F85;&#x6700;&#x540E;&#x5B8C;&#x6210;&#x3002;
</code></pre>
<h3 id="&#x5BF9;-multidex-&#x8FDB;&#x884C;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316;--&#x51CF;&#x5C11;-anr-&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x51CF;&#x5C11;&#x542F;&#x52A8;&#x901F;&#x5EA6;"><a name="&#x5BF9;-multidex-&#x8FDB;&#x884C;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316;--&#x51CF;&#x5C11;-anr-&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x51CF;&#x5C11;&#x542F;&#x52A8;&#x901F;&#x5EA6;" class="anchor-navigation-ex-anchor" href="#&#x5BF9;-multidex-&#x8FDB;&#x884C;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316;--&#x51CF;&#x5C11;-anr-&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x51CF;&#x5C11;&#x542F;&#x52A8;&#x901F;&#x5EA6;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.5. &#x5BF9; Multidex &#x8FDB;&#x884C;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316; ( &#x51CF;&#x5C11; ANR &#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x51CF;&#x5C11;&#x542F;&#x52A8;&#x901F;&#x5EA6;)</h3>
<p>&#x4E4B;&#x6240;&#x4EE5;&#x5199;&#x5728;&#x8FD9;&#x91CC;&#xFF0C;&#x662F;&#x4E3A;&#x4E86;&#x517C;&#x987E;&#x4E00;&#x4E0B;&#x5176;&#x4ED6;&#x535A;&#x5BA2;&#x7684;&#x8282;&#x594F;&#x3002;</p>
<pre><code class="lang-text">dex&#x7684;install&#x8FC7;&#x7A0B;&#x6BD4;&#x8F83;&#x590D;&#x6742;&#xFF0C;&#x5BB9;&#x6613;&#x5F15;&#x8D77;ANR&#x7684;&#x53D1;&#x751F;&#x3002;
&#x6CE8;&#x610F;&#xFF1A;&#x5F88;&#x591A;&#x535A;&#x5BA2;&#x8BF4; &#x5BF9; Multidex &#x8FDB;&#x884C;&#x4F18;&#x5316;&#x662F;&#x53EF;&#x4EE5;&#x51CF;&#x5C11;&#x542F;&#x52A8;&#x65F6;&#x95F4;&#xFF0C;&#x5176;&#x5B9E;&#x662F;&#x51CF;&#x5C11; ANR &#x7684;&#x3002; 
&#x65B9;&#x6CD5;&#x601D;&#x8DEF;&#x4E00;&#x822C;&#x6709;&#x4E24;&#x79CD;&#xFF0C;1&#x662F;&#x5F00;&#x5B50;&#x7EBF;&#x7A0B;&#x53BB;&#x52A0;&#x8F7D;&#xFF0C;2 &#x662F;&#x5F00;&#x5B50;&#x8FDB;&#x7A0B;&#x53BB;&#x52A0;&#x8F7D; 
https://github.com/hnyer/MultiDexTest
</code></pre>
<h3 id="&#x7C7B;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316;&#x3001;activity-&#x9884;&#x52A0;&#x8F7D;"><a name="&#x7C7B;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316;&#x3001;activity-&#x9884;&#x52A0;&#x8F7D;" class="anchor-navigation-ex-anchor" href="#&#x7C7B;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316;&#x3001;activity-&#x9884;&#x52A0;&#x8F7D;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.6. &#x7C7B;&#x9884;&#x52A0;&#x8F7D;&#x4F18;&#x5316;&#x3001;Activity &#x9884;&#x52A0;&#x8F7D;</h3>
<pre><code class="lang-text">&#x7701;&#x7565;&#x52A0;&#x8F7D;&#x7C7B;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x505A;&#x5230;&#x6781;&#x81F4;&#x3002;&#x4F46;&#x662F;&#x5927;&#x90E8;&#x5206;APP&#x4E1A;&#x52A1;&#x90FD;&#x505A;&#x4E0D;&#x5B8C;&#xFF0C;&#x6CA1;&#x8FD9;&#x4E2A;&#x5FC5;&#x8981;&#x505A;&#x8FD9;&#x4E9B;&#x3002;
</code></pre>
<h3 id="webview-&#x542F;&#x52A8;&#x4F18;&#x5316;"><a name="webview-&#x542F;&#x52A8;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#webview-&#x542F;&#x52A8;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.7. WebView &#x542F;&#x52A8;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x56E0;&#x4E3A; WebView &#x7B2C;&#x4E00;&#x6B21;&#x521B;&#x5EFA;&#x6BD4;&#x8F83;&#x8017;&#x65F6;&#xFF0C;&#x6240;&#x4EE5;&#x53EF;&#x4EE5;&#x9884;&#x5148;&#x521B;&#x5EFA;WebView&#xFF0C;&#x63D0;&#x524D;&#x5C06;&#x5176;&#x521D;&#x59CB;&#x5316;&#x3002;
&#x800C;&#x4E14;&#x8981;&#x4F7F;&#x7528;WebView&#x7F13;&#x5B58;&#x6C60;&#xFF0C;&#x7528;&#x5230;WebView&#x7684;&#x5730;&#x65B9;&#x90FD;&#x4ECE;&#x7F13;&#x5B58;&#x6C60;&#x53D6;&#xFF0C;&#x7F13;&#x5B58;&#x6C60;&#x4E2D;&#x6CA1;&#x6709;&#x7F13;&#x5B58;&#x518D;&#x521B;&#x5EFA;&#x3002;
&#x672C;&#x5730;&#x9884;&#x7F6E; html &#x548C; css &#xFF0C;WebView&#x521B;&#x5EFA;&#x7684;&#x65F6;&#x5019;&#x5148;&#x9884;&#x52A0;&#x8F7D;&#x672C;&#x5730;html&#xFF0C;&#x4E4B;&#x540E;&#x901A;&#x8FC7;js&#x811A;&#x672C;&#x586B;&#x5145;&#x5185;&#x5BB9;&#x90E8;&#x5206;&#x3002;
&#x51CF;&#x5C11; html &#x548C;css &#x4ECE;&#x7F51;&#x7EDC;&#x4E0B;&#x8F7D;&#x7684;&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#x3002;
</code></pre>
<h3 id="&#x9875;&#x9762;&#x6570;&#x636E;&#x9884;&#x52A0;&#x8F7D;"><a name="&#x9875;&#x9762;&#x6570;&#x636E;&#x9884;&#x52A0;&#x8F7D;" class="anchor-navigation-ex-anchor" href="#&#x9875;&#x9762;&#x6570;&#x636E;&#x9884;&#x52A0;&#x8F7D;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.8. &#x9875;&#x9762;&#x6570;&#x636E;&#x9884;&#x52A0;&#x8F7D;</h3>
<pre><code class="lang-text">&#x5728;&#x4E3B;&#x9875;&#x7A7A;&#x95F2;&#x65F6;&#xFF0C;&#x5C06;&#x5176;&#x5B83;&#x9875;&#x9762;&#x7684;&#x6570;&#x636E;&#x5148;&#x51C6;&#x5907;&#x597D;&#xFF0C;
&#x7B49;&#x5230;&#x6253;&#x5F00;&#x8BE5;&#x9875;&#x9762;&#x65F6;&#xFF0C;&#x5C31;&#x76F4;&#x63A5;&#x4ECE;&#x5185;&#x5B58;&#x6216;&#x6570;&#x636E;&#x5E93;&#x53D6;&#x6570;&#x636E;&#x5E76;&#x663E;&#x793A;&#x3002;
&#x5C24;&#x5176;&#x662F;&#x9488;&#x5BF9;&#x90A3;&#x4E9B;&#x9700;&#x8981;&#x4ECE;&#x7F51;&#x7EDC;&#x8BFB;&#x53D6;&#x7684;&#x5185;&#x5BB9;&#x3002;
&#x4F8B;&#x5982;pc&#x7AEF;&#x7684;&#x6D4F;&#x89C8;&#x5668;&#xFF0C;&#x6709;&#x7684;&#x4F1A;&#x6709;&#x4E00;&#x4E2A;&#x9884;&#x52A0;&#x8F7D;&#x529F;&#x80FD;&#x3002;
</code></pre>
<h3 id="&#x4E3B;&#x9875;&#x7684;&#x7ED8;&#x5236;&#x4F18;&#x5316;"><a name="&#x4E3B;&#x9875;&#x7684;&#x7ED8;&#x5236;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x4E3B;&#x9875;&#x7684;&#x7ED8;&#x5236;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.9. &#x4E3B;&#x9875;&#x7684;&#x7ED8;&#x5236;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x9488;&#x5BF9;&#x5E03;&#x5C40;&#x548C;&#x7ED8;&#x5236;&#x8FDB;&#x884C;&#x4F18;&#x5316;&#xFF0C;&#x51CF;&#x5C11;&#x52A0;&#x8F7D;&#x548C;&#x6E32;&#x67D3;&#x65F6;&#x95F4;&#x3002;
</code></pre>
<h3 id="&#x542F;&#x52A8;&#x9636;&#x6BB5;&#x6291;&#x5236;gc-&#xFF08;&#x666E;&#x901A;app-&#x96BE;&#x641E;&#x3001;&#x6210;&#x672C;&#x9AD8;&#xFF0C;&#x96BE;&#x5EA6;&#x5927;&#xFF09;"><a name="&#x542F;&#x52A8;&#x9636;&#x6BB5;&#x6291;&#x5236;gc-&#xFF08;&#x666E;&#x901A;app-&#x96BE;&#x641E;&#x3001;&#x6210;&#x672C;&#x9AD8;&#xFF0C;&#x96BE;&#x5EA6;&#x5927;&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x542F;&#x52A8;&#x9636;&#x6BB5;&#x6291;&#x5236;gc-&#xFF08;&#x666E;&#x901A;app-&#x96BE;&#x641E;&#x3001;&#x6210;&#x672C;&#x9AD8;&#xFF0C;&#x96BE;&#x5EA6;&#x5927;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.10. &#x542F;&#x52A8;&#x9636;&#x6BB5;&#x6291;&#x5236;GC &#xFF08;&#x666E;&#x901A;APP &#x96BE;&#x641E;&#x3001;&#x6210;&#x672C;&#x9AD8;&#xFF0C;&#x96BE;&#x5EA6;&#x5927;&#xFF09;</h3>
<pre><code class="lang-text">&#x542F;&#x52A8;&#x65F6; GC &#x6291;&#x5236;&#xFF0C;&#x5141;&#x8BB8;&#x5806;&#x4E00;&#x76F4;&#x589E;&#x957F;&#xFF0C;&#x76F4;&#x5230;&#x5F00;&#x53D1;&#x4EBA;&#x5458;&#x4E3B;&#x52A8;&#x505C;&#x6B62; GC &#x6291;&#x5236;&#x6216;&#x8005; OOM &#x505C;&#x6B62; GC &#x6291;&#x5236;&#xFF0C;
&#x8FD9;&#x662F;&#x4E00;&#x79CD;&quot;&#x7A7A;&#x95F4;&#x6362;&#x65F6;&#x95F4;&quot;&#x7B56;&#x7565;&#xFF0C;&#x7528;&#x66F4;&#x591A;&#x7684;&#x5185;&#x5B58;&#x6D88;&#x8017;&#x6765;&#x6362;&#x53D6;&#x542F;&#x52A8;&#x65F6;&#x95F4;&#x7684;&#x7F29;&#x77ED;&#xFF0C;
&#x8FD9;&#x79CD;&#x7B56;&#x7565;&#x53EF;&#x884C;&#x6709;&#x4E24;&#x4E2A;&#x524D;&#x63D0;&#xFF1A;
&#x4E00;&#x662F;&#x8BBE;&#x5907;&#x5382;&#x5546;&#x6CA1;&#x6709;&#x52A0;&#x5BC6;&#x5185;&#x5B58;&#x4E2D;&#x7684; Dalvik &#x5E93;&#x6587;&#x4EF6;&#xFF0C;
&#x4E8C;&#x662F;&#x8BBE;&#x5907;&#x5382;&#x5546;&#x6CA1;&#x6709;&#x6539;&#x52A8; Google &#x7684; Dalvik &#x6E90;&#x7801;&#xFF08;&#x6216;&#x8005;&#x5C11;&#x91CF;&#x7684;&#x6539;&#x52A8;&#xFF09;&#xFF0C;
&#x7406;&#x8BBA;&#x4E0A;&#x901A;&#x8FC7;&#x767D;&#x540D;&#x5355;&#x7684;&#x65B9;&#x5F0F;&#x53EF;&#x4EE5;&#x8986;&#x76D6;&#x6240;&#x6709;&#x8BBE;&#x5907;&#xFF0C;&#x4F46;&#x662F;&#x5B9E;&#x73B0;&#x548C;&#x7EF4;&#x62A4;&#x6210;&#x672C;&#x90FD;&#x975E;&#x5E38;&#x9AD8;&#x3002;
</code></pre>
<h3 id="cpu&#x9501;&#x9891;&#xFF08;&#x666E;&#x901A;app-&#x96BE;&#x641E;&#xFF0C;&#x6CA1;&#x6743;&#x9650;&#xFF09;"><a name="cpu&#x9501;&#x9891;&#xFF08;&#x666E;&#x901A;app-&#x96BE;&#x641E;&#xFF0C;&#x6CA1;&#x6743;&#x9650;&#xFF09;" class="anchor-navigation-ex-anchor" href="#cpu&#x9501;&#x9891;&#xFF08;&#x666E;&#x901A;app-&#x96BE;&#x641E;&#xFF0C;&#x6CA1;&#x6743;&#x9650;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.11. CPU&#x9501;&#x9891;&#xFF08;&#x666E;&#x901A;APP &#x96BE;&#x641E;&#xFF0C;&#x6CA1;&#x6743;&#x9650;&#xFF09;</h3>
<pre><code class="lang-text">&#x4E00;&#x4E2A;&#x8BBE;&#x5907;&#x7684;CPU&#x901A;&#x5E38;&#x90FD;&#x662F;4&#x6838;&#x6216;&#x8005;8&#x6838;&#xFF0C;
&#x4F46;&#x662F;&#x5E94;&#x7528;&#x5728;&#x4E00;&#x822C;&#x60C5;&#x51B5;&#x4E0B;&#x5BF9;CPU&#x7684;&#x5229;&#x7528;&#x7387;&#x5E76;&#x4E0D;&#x9AD8;&#xFF0C;&#x53EF;&#x80FD;&#x53EA;&#x6709;30%&#x6216;&#x8005;50%&#xFF0C;
&#x5982;&#x679C;&#x6211;&#x4EEC;&#x5728;&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x66B4;&#x529B;&#x62C9;&#x4F38;CPU&#x9891;&#x7387;&#xFF0C;&#x4EE5;&#x6B64;&#x63D0;&#x9AD8;CPU&#x7684;&#x5229;&#x7528;&#x7387;&#xFF0C;
&#x90A3;&#x4E48;&#xFF0C;&#x5E94;&#x7528;&#x7684;&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x4F1A;&#x63D0;&#x5347;&#x4E0D;&#x5C11;&#x3002;

&#x5728;Android&#x7CFB;&#x7EDF;&#x4E2D;&#xFF0C;CPU&#x76F8;&#x5173;&#x7684;&#x4FE1;&#x606F;&#x5B58;&#x50A8;&#x5728;/sys/devices/system/cpu&#x76EE;&#x5F55;&#x7684;&#x6587;&#x4EF6;&#x4E2D;&#xFF0C;
&#x901A;&#x8FC7;&#x5BF9;&#x8BE5;&#x76EE;&#x5F55;&#x4E0B;&#x7684;&#x7279;&#x5B9A;&#x6587;&#x4EF6;&#x8FDB;&#x884C;&#x5199;&#x503C;&#xFF0C;
&#x5B9E;&#x73B0;&#x5BF9;CPU&#x9891;&#x7387;&#x7B49;&#x72B6;&#x6001;&#x4FE1;&#x606F;&#x7684;&#x66F4;&#x6539;&#x3002;
</code></pre>
<h3 id="io&#x4F18;&#x5316;"><a name="io&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#io&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.12. IO&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">1&#x3001;&#x542F;&#x52A8;&#x8FC7;&#x7A0B;&#x4E0D;&#x5EFA;&#x8BAE;&#x51FA;&#x73B0;&#x7F51;&#x7EDC;IO&#x3002;
2&#x3001;&#x53EA;&#x8BFB;&#x53D6;&#x542F;&#x52A8;&#x4E2D;&#x7528;&#x5230;&#x7684;&#x6570;&#x636E;&#x3002;
</code></pre>
<h3 id="&#x6570;&#x636E;&#x91CD;&#x6392;"><a name="&#x6570;&#x636E;&#x91CD;&#x6392;" class="anchor-navigation-ex-anchor" href="#&#x6570;&#x636E;&#x91CD;&#x6392;"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.13. &#x6570;&#x636E;&#x91CD;&#x6392;</h3>
<pre><code class="lang-text">Dex &#x6587;&#x4EF6;&#x7528;&#x5230;&#x7684;&#x7C7B;&#x548C;APK&#x91CC;&#x9762;&#x5404;&#x79CD;&#x8D44;&#x6E90;&#x6587;&#x4EF6;&#x90FD;&#x6BD4;&#x8F83;&#x5C0F;&#xFF0C;
&#x8BFB;&#x53D6;&#x9891;&#x7E41;&#xFF0C;&#x4E14;&#x78C1;&#x76D8;&#x5730;&#x5740;&#x5206;&#x5E03;&#x8303;&#x56F4;&#x6BD4;&#x8F83;&#x5E7F;&#x3002;
&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5229;&#x7528;Linux&#x6587;&#x4EF6;IO&#x6D41;&#x7A0B;&#x4E2D;&#x7684;page cache&#x673A;&#x5236;
&#x5C06;&#x5B83;&#x4EEC;&#x6309;&#x7167;&#x8BFB;&#x53D6;&#x987A;&#x5E8F;&#x91CD;&#x65B0;&#x6392;&#x5217;&#x5728;&#x4E00;&#x8D77;&#xFF0C;&#x4EE5;&#x51CF;&#x5C11;&#x771F;&#x5B9E;&#x7684;&#x78C1;&#x76D8;IO&#x6B21;&#x6570;&#x3002;

1&#x3001;&#x4F7F;&#x7528; Facebook &#x7684; ReDex &#x7684;Interdex&#x8C03;&#x6574;&#x7C7B;&#x5728;Dex&#x4E2D;&#x7684;&#x6392;&#x5217;&#x987A;&#x5E8F;&#x3002;
2&#x3001;&#x8D44;&#x6E90;&#x6587;&#x4EF6;&#x91CD;&#x6392;  &#xFF08;&#x666E;&#x901A;APP&#x7528;&#x4E0D;&#x4E0A;&#xFF09;
&#x6700;&#x4F73;&#x65B9;&#x6848;&#x662F;&#x4FEE;&#x6539;&#x5185;&#x6838;&#x6E90;&#x7801;&#xFF0C;&#x5B9E;&#x73B0;&#x7EDF;&#x8BA1;&#x3001;&#x5EA6;&#x91CF;&#x3001;&#x81EA;&#x52A8;&#x5316;&#xFF0C;&#x5176;&#x6B21;&#x4E5F;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;Hook&#x6846;&#x67B6;&#x8FDB;&#x884C;&#x7EDF;&#x8BA1;&#x5F97;&#x51FA;&#x8D44;&#x6E90;&#x52A0;&#x8F7D;&#x987A;&#x5E8F;&#x5217;&#x8868;&#x3002;
</code></pre>
<h3 id="1"><a name="1" class="anchor-navigation-ex-anchor" href="#1"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.14. 1</h3>
<pre><code class="lang-text">

</code></pre>
<h3 id="1_1"><a name="1_1" class="anchor-navigation-ex-anchor" href="#1_1"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.15. 1</h3>
<pre><code class="lang-text">

</code></pre>
<h3 id="1_2"><a name="1_2" class="anchor-navigation-ex-anchor" href="#1_2"><i class="fa fa-link" aria-hidden="true"></i></a>5.7.16. 1</h3>
<pre><code class="lang-text">

</code></pre>
<h1 id="io-&#x4F18;&#x5316;--&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><a name="io-&#x4F18;&#x5316;--&#xFF08;&#x5B8C;&#x6210;&#xFF09;" class="anchor-navigation-ex-anchor" href="#io-&#x4F18;&#x5316;--&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>6. IO &#x4F18;&#x5316;  &#xFF08;&#x5B8C;&#x6210;&#xFF09;</h1>
<pre><code class="lang-text">&#x4F7F;&#x7528;&#x4E8B;&#x52A1;&#x8FDB;&#x884C;&#x6279;&#x91CF;&#x6570;&#x636E;&#x64CD;&#x4F5C;&#xFF1A; 
&#x6570;&#x636E;&#x5E93;&#x64CD;&#x4F5C;&#x7684;&#x672C;&#x8D28;&#x662F;&#x5BF9;&#x78C1;&#x76D8;&#x6587;&#x4EF6;&#x7684;&#x64CD;&#x4F5C;&#xFF0C;
&#x9891;&#x7E41;&#x64CD;&#x4F5C;&#x6587;&#x4EF6;&#x662F;&#x4E00;&#x4E2A;&#x8017;&#x65F6;&#x64CD;&#x4F5C;&#xFF0C;&#x5F71;&#x54CD;&#x6570;&#x636E;&#x5E93;&#x7684;&#x5B58;&#x53D6;&#x901F;&#x5EA6;&#x3002;
&#x4F7F;&#x7528;&#x4E8B;&#x52A1;&#x4F1A;&#x964D;&#x4F4E;&#x6570;&#x636E;&#x5E93;&#x6587;&#x4EF6;&#x7684;&#x5F00;&#x5173;&#x9891;&#x7387;&#xFF0C;&#x4ECE;&#x800C;&#x8282;&#x7EA6;&#x64CD;&#x4F5C;&#x65F6;&#x95F4;&#x3002;
</code></pre>
<h2 id="io-&#x76F8;&#x5173;&#x7684;&#x6982;&#x5FF5;"><a name="io-&#x76F8;&#x5173;&#x7684;&#x6982;&#x5FF5;" class="anchor-navigation-ex-anchor" href="#io-&#x76F8;&#x5173;&#x7684;&#x6982;&#x5FF5;"><i class="fa fa-link" aria-hidden="true"></i></a>6.1. IO &#x76F8;&#x5173;&#x7684;&#x6982;&#x5FF5;</h2>
<pre><code class="lang-text">&#x865A;&#x62DF;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#xFF08;VFS&#xFF09; &#xFF1A;
&#x5C4F;&#x853D;&#x5177;&#x4F53;&#x7684;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#xFF0C;&#x4E3A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;&#x64CD;&#x4F5C;&#x63D0;&#x4F9B;&#x7EDF;&#x4E00;&#x7684;&#x63A5;&#x53E3;;

&#x9875;&#x7F13;&#x5B58;&#xFF08;Page Cache&#xFF09;:
&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x5BF9;&#x6570;&#x636E;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x76EE;&#x7684;&#x662F;&#x63D0;&#x5347;&#x5185;&#x5B58;&#x547D;&#x4E2D;&#x7387;;

Buffer Cache : 
&#x78C1;&#x76D8;&#x5BF9;&#x6570;&#x636E;&#x7684;&#x7F13;&#x5B58;&#xFF0C;&#x76EE;&#x7684;&#x662F;&#x5408;&#x5E76;&#x90E8;&#x5206;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x7684; I/O &#x8BF7;&#x6C42;&#x3001;&#x964D;&#x4F4E;&#x78C1;&#x76D8; I/O &#x7684;&#x6B21;&#x6570;,
&#x540E;&#x6765;&#x5B83;&#x4E5F;&#x5408;&#x5E76;&#x5230; Page Cache &#x4E2D;&#x7684; Buffer Page &#x4E86;;
</code></pre>
<h2 id="io-&#x6709;&#x65F6;&#x5019;&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x7A81;&#x7136;&#x5F88;&#x6162;&#xFF1F;"><a name="io-&#x6709;&#x65F6;&#x5019;&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x7A81;&#x7136;&#x5F88;&#x6162;&#xFF1F;" class="anchor-navigation-ex-anchor" href="#io-&#x6709;&#x65F6;&#x5019;&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x7A81;&#x7136;&#x5F88;&#x6162;&#xFF1F;"><i class="fa fa-link" aria-hidden="true"></i></a>6.2. I/O &#x6709;&#x65F6;&#x5019;&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x7A81;&#x7136;&#x5F88;&#x6162;&#xFF1F;</h2>
<pre><code class="lang-text">1&#x3001;&#x5185;&#x5B58;&#x4E0D;&#x8DB3;&#x3002;
&#x5185;&#x5B58;&#x4E0D;&#x8DB3;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7CFB;&#x7EDF;&#x4F1A;&#x56DE;&#x6536; Page Cache &#x548C; Buffer Cache &#x7684;&#x5185;&#x5B58;&#xFF0C;
&#x5927;&#x90E8;&#x5206;&#x7684;&#x5199;&#x64CD;&#x4F5C;&#x4F1A;&#x76F4;&#x63A5;&#x843D;&#x76D8;&#xFF0C;&#x5BFC;&#x81F4;&#x6027;&#x80FD;&#x4F4E;&#x4E0B;&#xFF1B; 

2&#x3001;&#x5199;&#x5165;&#x653E;&#x5927;&#x3002;
&#x5199;&#x5165;&#x653E;&#x5927;&#xFF08; Write amplification&#xFF0C;&#x7B80;&#x79F0;WA &#xFF09;&#x662F;&#x95EA;&#x5B58;&#x548C;&#x56FA;&#x6001;&#x786C;&#x76D8;&#xFF08;SSD&#xFF09;&#x4E2D;&#x4E00;&#x79CD;&#x4E0D;&#x826F;&#x7684;&#x73B0;&#x8C61;&#xFF0C;
&#x5373;&#x5B9E;&#x9645;&#x5199;&#x5165;&#x7684;&#x7269;&#x7406;&#x6570;&#x636E;&#x91CF;&#x662F;&#x5199;&#x5165;&#x6570;&#x636E;&#x91CF;&#x7684;&#x591A;&#x500D;&#x3002; [1]
&#x95EA;&#x5B58;&#x91CD;&#x590D;&#x5199;&#x5165;&#x9700;&#x8981;&#x5148;&#x8FDB;&#x884C;&#x64E6;&#x9664;&#xFF0C;&#x64E6;&#x9664;&#x64CD;&#x4F5C;&#x7684;&#x57FA;&#x672C;&#x5355;&#x5143;&#x662F; block &#x5757;&#xFF0C;
&#x4E00;&#x4E2A; page &#x9875;&#x7684;&#x5199;&#x5165;&#x64CD;&#x4F5C;&#x5C06;&#x4F1A;&#x5F15;&#x8D77;&#x6574;&#x4E2A;&#x5757;&#x6570;&#x636E;&#x7684;&#x8FC1;&#x79FB;&#xFF0C;&#x8FD9;&#x5C31;&#x662F;&#x5178;&#x578B;&#x7684;&#x5199;&#x5165;&#x653E;&#x5927;&#x73B0;&#x8C61;&#xFF0C;
&#x4F4E;&#x7AEF;&#x673A;&#x6216;&#x8005;&#x4F7F;&#x7528;&#x6BD4;&#x8F83;&#x4E45;&#x7684;&#x8BBE;&#x5907;&#xFF0C;&#x7531;&#x4E8E;&#x78C1;&#x76D8;&#x788E;&#x7247;&#x591A;&#x3001;&#x5269;&#x4F59;&#x7A7A;&#x95F4;&#x5C11;&#xFF0C;&#x975E;&#x5E38;&#x5BB9;&#x6613;&#x51FA;&#x73B0;&#x5199;&#x5165;&#x653E;&#x5927;&#x7684;&#x73B0;&#x8C61;&#x3002; 

3&#x3001;&#x914D;&#x7F6E;&#x4E0D;&#x591F;&#x3002;
&#x4F4E;&#x7AEF;&#x673A;&#x7684; CPU &#x548C;&#x95EA;&#x5B58;&#x7684;&#x6027;&#x80FD;&#x76F8;&#x5BF9;&#x4E5F;&#x8F83;&#x5DEE;&#xFF0C;&#x5728;&#x9AD8;&#x8D1F;&#x8F7D;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x5BB9;&#x6613;&#x51FA;&#x73B0;&#x74F6;&#x9888;&#x3002;
</code></pre>
<h2 id="io-&#x6027;&#x80FD;&#x8BC4;&#x4F30;&#x6307;&#x6807;"><a name="io-&#x6027;&#x80FD;&#x8BC4;&#x4F30;&#x6307;&#x6807;" class="anchor-navigation-ex-anchor" href="#io-&#x6027;&#x80FD;&#x8BC4;&#x4F30;&#x6307;&#x6807;"><i class="fa fa-link" aria-hidden="true"></i></a>6.3. I/O &#x6027;&#x80FD;&#x8BC4;&#x4F30;&#x6307;&#x6807;</h2>
<pre><code class="lang-text">// &#x78C1;&#x76D8;&#x541E;&#x5410;&#x91CF;
&#x6BCF;&#x79D2;&#x78C1;&#x76D8;I/O&#x7684;&#x6D41;&#x91CF;&#xFF0C;&#x5373;&#x78C1;&#x76D8;&#x5199;&#x5165;&#x52A0;&#x4E0A;&#x8BFB;&#x51FA;&#x7684;&#x6570;&#x636E;&#x7684;&#x5927;&#x5C0F;&#x3002;

//&#x5B58;&#x50A8; IOPS ( Input/Output Operations Per Second )
&#x78C1;&#x76D8;IOPS&#x662F;&#x6307;&#x4E00;&#x79D2;&#x5185;&#x78C1;&#x76D8;&#x8FDB;&#x884C;&#x591A;&#x5C11;&#x6B21;I/O&#x8BFB;&#x5199;&#xFF1B;
</code></pre>
<h2 id="io-&#x7C7B;&#x578B;"><a name="io-&#x7C7B;&#x578B;" class="anchor-navigation-ex-anchor" href="#io-&#x7C7B;&#x578B;"><i class="fa fa-link" aria-hidden="true"></i></a>6.4. io &#x7C7B;&#x578B;</h2>
<p>&#x6807;&#x51C6;IO &#x3001; MMAP &#x3001;&#x76F4;&#x63A5;IO ;
BIO &#x3001; NIO</p>
<pre><code class="lang-text">// BIO ( Blocking I/O  )  
&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x91CC;&#x53EA;&#x80FD;&#x5904;&#x7406;&#x4E00;&#x4E2A;socket&#xFF0C;&#x5C31;&#x7B97;accept&#x4E86;&#x591A;&#x4E2A;&#x4E5F;&#x6CA1;&#x7528;&#xFF0C;
&#x524D;&#x4E00;&#x4E2A;socket&#x88AB;&#x963B;&#x585E;&#x4E86;&#xFF0C;&#x540E;&#x9762;&#x7684;&#x662F;&#x65E0;&#x6CD5;&#x88AB;&#x6267;&#x884C;&#x5230;&#x7684;&#x3002;

// NIO ( Non-blocking I/O): 
NIO&#x662F;&#x4E00;&#x79CD;&#x540C;&#x6B65;&#x975E;&#x963B;&#x585E;&#x7684;I/O&#x6A21;&#x578B;&#xFF0C;&#x5728;Java 1.4 &#x4E2D;&#x5F15;&#x5165;&#x4E86;NIO&#x6846;&#x67B6;&#xFF0C;&#x5BF9;&#x5E94; java.nio &#x5305;&#x3002;
&#x4F7F;&#x7528;&#x975E;&#x963B;&#x585E;IO&#x7684;&#x8BDD;&#xFF0C;&#x4E00;&#x5230;&#x4E24;&#x4E2A;&#x7EBF;&#x7A0B;&#x57FA;&#x672C;&#x4E0A;&#x5C31;&#x591F;&#x4E86;&#xFF0C;&#x56E0;&#x4E3A;&#x7EBF;&#x7A0B;&#x4E0D;&#x4F1A;&#x4EA7;&#x751F;&#x963B;&#x585E;&#xFF0C;
&#x597D;&#x6BD4;&#x4E00;&#x4E0B;&#x63A5;&#x6536;A&#x8BF7;&#x6C42;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x53E6;&#x4E00;&#x4E0B;&#x63A5;&#x6536;B&#x8BF7;&#x6C42;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x7B49;&#x7B49;&#xFF0C;
&#x5C31;&#x662F;&#x4E0D;&#x505C;&#x5730;&#x4E1C;&#x5954;&#x897F;&#x8DD1;&#xFF0C;&#x76F4;&#x63A5;&#x5230;&#x628A;&#x6570;&#x636E;&#x63A5;&#x6536;&#x5B8C;&#x4E86;&#x3002;
</code></pre>
<p><img src="../pics/io&#x7C7B;&#x578B;.png" alt=""></p>
<h2 id="io-&#x76D1;&#x63A7;&#x5DE5;&#x5177;"><a name="io-&#x76D1;&#x63A7;&#x5DE5;&#x5177;" class="anchor-navigation-ex-anchor" href="#io-&#x76D1;&#x63A7;&#x5DE5;&#x5177;"><i class="fa fa-link" aria-hidden="true"></i></a>6.5. IO &#x76D1;&#x63A7;&#x5DE5;&#x5177;</h2>
<pre><code class="lang-text">&#x817E;&#x8BAF;&#x5F00;&#x6E90;&#x5DE5;&#x5177; Matrix &#xFF0C;
https://github.com/Tencent/matrix#matrix_cn
IO Canary &#x6027;&#x80FD;&#x3001;&#x6CC4;&#x6F0F;&#x5168;&#x9762;&#x76D1;&#x63A7;&#xFF0C;&#x5BF9; IO &#x8D28;&#x91CF;&#x5FC3;&#x4E2D;&#x6709;&#x6570;
</code></pre>
<h2 id="io&#x4F18;&#x5316;&#x63AA;&#x65BD;"><a name="io&#x4F18;&#x5316;&#x63AA;&#x65BD;" class="anchor-navigation-ex-anchor" href="#io&#x4F18;&#x5316;&#x63AA;&#x65BD;"><i class="fa fa-link" aria-hidden="true"></i></a>6.6. IO&#x4F18;&#x5316;&#x63AA;&#x65BD;</h2>
<h3 id="&#x5BF9;&#x5927;&#x6587;&#x4EF6;&#x4F7F;&#x7528;-mmap-&#x6216;&#x8005;-nio-&#x65B9;&#x5F0F;&#x3002;"><a name="&#x5BF9;&#x5927;&#x6587;&#x4EF6;&#x4F7F;&#x7528;-mmap-&#x6216;&#x8005;-nio-&#x65B9;&#x5F0F;&#x3002;" class="anchor-navigation-ex-anchor" href="#&#x5BF9;&#x5927;&#x6587;&#x4EF6;&#x4F7F;&#x7528;-mmap-&#x6216;&#x8005;-nio-&#x65B9;&#x5F0F;&#x3002;"><i class="fa fa-link" aria-hidden="true"></i></a>6.6.1. &#x5BF9;&#x5927;&#x6587;&#x4EF6;&#x4F7F;&#x7528; mmap &#x6216;&#x8005; nio &#x65B9;&#x5F0F;&#x3002;</h3>
<pre><code class="lang-text"> ...
</code></pre>
<h3 id="&#x5B89;&#x88C5;&#x5305;&#x4E0D;&#x538B;&#x7F29;&#x3002;"><a name="&#x5B89;&#x88C5;&#x5305;&#x4E0D;&#x538B;&#x7F29;&#x3002;" class="anchor-navigation-ex-anchor" href="#&#x5B89;&#x88C5;&#x5305;&#x4E0D;&#x538B;&#x7F29;&#x3002;"><i class="fa fa-link" aria-hidden="true"></i></a>6.6.2. &#x5B89;&#x88C5;&#x5305;&#x4E0D;&#x538B;&#x7F29;&#x3002;</h3>
<pre><code class="lang-text">&#x5BF9;&#x542F;&#x52A8;&#x8FC7;&#x7A0B;&#x9700;&#x8981;&#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x6307;&#x5B9A;&#x5728;&#x5B89;&#x88C5;&#x5305;&#x4E2D;&#x4E0D;&#x538B;&#x7F29;&#xFF0C;
&#x8FD9;&#x6837;&#x4E5F;&#x4F1A;&#x52A0;&#x5FEB;&#x542F;&#x52A8;&#x901F;&#x5EA6;&#xFF0C;&#x4F46;&#x5E26;&#x6765;&#x7684;&#x5F71;&#x54CD;&#x662F;&#x5B89;&#x88C5;&#x5305;&#x4F53;&#x79EF;&#x589E;&#x5927;&#x3002;
</code></pre>
<h3 id="buffer-&#x590D;&#x7528;"><a name="buffer-&#x590D;&#x7528;" class="anchor-navigation-ex-anchor" href="#buffer-&#x590D;&#x7528;"><i class="fa fa-link" aria-hidden="true"></i></a>6.6.3. Buffer &#x590D;&#x7528;</h3>
<pre><code class="lang-text">&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5229;&#x7528; Okio &#x5F00;&#x6E90;&#x5E93;&#xFF0C;
&#x5B83;&#x5185;&#x90E8;&#x7684; ByteString &#x548C; Buffer &#x901A;&#x8FC7;&#x91CD;&#x7528;&#x7B49;&#x6280;&#x5DE7;&#xFF0C;
&#x5F88;&#x5927;&#x7A0B;&#x5EA6;&#x4E0A;&#x51CF;&#x5C11; CPU &#x548C;&#x5185;&#x5B58;&#x7684;&#x6D88;&#x8017;&#x3002;
</code></pre>
<h3 id="&#x5B58;&#x50A8;&#x7ED3;&#x6784;&#x548C;&#x7B97;&#x6CD5;&#x7684;&#x4F18;&#x5316;"><a name="&#x5B58;&#x50A8;&#x7ED3;&#x6784;&#x548C;&#x7B97;&#x6CD5;&#x7684;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x5B58;&#x50A8;&#x7ED3;&#x6784;&#x548C;&#x7B97;&#x6CD5;&#x7684;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>6.6.4. &#x5B58;&#x50A8;&#x7ED3;&#x6784;&#x548C;&#x7B97;&#x6CD5;&#x7684;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x901A;&#x8FC7;&#x7B97;&#x6CD5;&#x6216;&#x8005;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x7684;&#x4F18;&#x5316;&#xFF0C;&#x8BA9;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5C3D;&#x91CF;&#x7684;&#x5C11; I/O &#x751A;&#x81F3;&#x5B8C;&#x5168;&#x6CA1;&#x6709; I/O, 
&#x6BD4;&#x5982;&#x4E00;&#x4E9B;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4ECE;&#x542F;&#x52A8;&#x5B8C;&#x5168;&#x89E3;&#x6790;&#xFF0C;&#x6539;&#x6210;&#x8BFB;&#x53D6;&#x65F6;&#x624D;&#x89E3;&#x6790;&#x5BF9;&#x5E94;&#x7684;&#x9879;&#xFF1B;
&#x66FF;&#x6362;&#x6389; XML&#x3001;JSON &#x8FD9;&#x4E9B;&#x683C;&#x5F0F;&#x6BD4;&#x8F83;&#x5197;&#x4F59;&#x3001;&#x6027;&#x80FD;&#x6BD4;&#x8F83;&#x8F83;&#x5DEE;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;;
</code></pre>
<h1 id="&#x5B58;&#x50A8;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><a name="&#x5B58;&#x50A8;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x5B58;&#x50A8;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>7. &#x5B58;&#x50A8;&#x4F18;&#x5316; &#xFF08;&#x5B8C;&#x6210;&#xFF09;</h1>
<h2 id="&#x9700;&#x8981;&#x4F18;&#x5316;&#x5B58;&#x50A8;&#x7684;&#x539F;&#x56E0;"><a name="&#x9700;&#x8981;&#x4F18;&#x5316;&#x5B58;&#x50A8;&#x7684;&#x539F;&#x56E0;" class="anchor-navigation-ex-anchor" href="#&#x9700;&#x8981;&#x4F18;&#x5316;&#x5B58;&#x50A8;&#x7684;&#x539F;&#x56E0;"><i class="fa fa-link" aria-hidden="true"></i></a>7.1. &#x9700;&#x8981;&#x4F18;&#x5316;&#x5B58;&#x50A8;&#x7684;&#x539F;&#x56E0;</h2>
<pre><code class="lang-text">1&#x3001;&#x50A8;&#x5B58;&#x8017;&#x65F6;&#x8F83;&#x957F;
2&#x3001;&#x7EBF;&#x7A0B;&#x4E0D;&#x5B89;&#x5168;
3&#x3001;&#x6709;&#x6F5C;&#x5728;&#x7684; ANR 
4&#x3001;&#x4E0D;&#x652F;&#x6301;&#x8DE8;&#x8FDB;&#x7A0B;&#x3002;
</code></pre>
<h2 id="&#x5E38;&#x7528;&#x7684;&#x5B58;&#x50A8;&#x65B9;&#x6848;"><a name="&#x5E38;&#x7528;&#x7684;&#x5B58;&#x50A8;&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#&#x5E38;&#x7528;&#x7684;&#x5B58;&#x50A8;&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>7.2. &#x5E38;&#x7528;&#x7684;&#x5B58;&#x50A8;&#x65B9;&#x6848;</h2>
<h3 id="sharedpreferences"><a name="sharedpreferences" class="anchor-navigation-ex-anchor" href="#sharedpreferences"><i class="fa fa-link" aria-hidden="true"></i></a>7.2.1. SharedPreferences</h3>
<pre><code class="lang-text">&#x7528;&#x6765;&#x5B58;&#x50A8;&#x4E00;&#x4E9B;&#x6BD4;&#x8F83;&#x5C0F;&#x7684;&#x952E;&#x503C;&#x5BF9;&#x96C6;&#x5408; &#x3002;&#x7B80;&#x5355;&#xFF0C;&#x8F7B;&#x91CF;&#x3002;
&#x591A;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#xFF0C;&#x4F46;&#x662F;&#x8DE8;&#x8FDB;&#x7A0B;&#x4E0D;&#x5B89;&#x5168;
</code></pre>
<h3 id="contentprovider"><a name="contentprovider" class="anchor-navigation-ex-anchor" href="#contentprovider"><i class="fa fa-link" aria-hidden="true"></i></a>7.2.2. ContentProvider</h3>
<pre><code class="lang-text">&#x56DB;&#x5927;&#x7EC4;&#x4EF6;&#x4E4B;&#x4E00;&#xFF0C;&#x63D0;&#x4F9B;&#x4E0D;&#x540C;&#x8FDB;&#x7A0B;&#x751A;&#x81F3;&#x4E0D;&#x540C;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x4E4B;&#x95F4;&#x5171;&#x4EAB;&#x6570;&#x636E;&#x7684;&#x673A;&#x5236;&#xFF1B;
</code></pre>
<h3 id="datastore"><a name="datastore" class="anchor-navigation-ex-anchor" href="#datastore"><i class="fa fa-link" aria-hidden="true"></i></a>7.2.3. DataStore</h3>
<pre><code class="lang-text">DataStore &#x662F; Jetpack &#x4E2D;&#x7684;&#x4E00;&#x5458;&#x3002;
</code></pre>
<h3 id="mmkv"><a name="mmkv" class="anchor-navigation-ex-anchor" href="#mmkv"><i class="fa fa-link" aria-hidden="true"></i></a>7.2.4. MMKV</h3>
<pre><code class="lang-text">&#x817E;&#x8BAF;&#x5F00;&#x6E90;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x5DE5;&#x5177;&#x3002;&#x53E3;&#x7891;&#x8FD8;&#x4E0D;&#x9519;&#x3002;
</code></pre>
<h3 id="sqlite"><a name="sqlite" class="anchor-navigation-ex-anchor" href="#sqlite"><i class="fa fa-link" aria-hidden="true"></i></a>7.2.5. SQLite</h3>
<pre><code class="lang-text">&#x6570;&#x636E;&#x5E93;&#x5B58;&#x50A8;
</code></pre>
<h3 id="&#x6587;&#x4EF6;&#x5B58;&#x50A8;"><a name="&#x6587;&#x4EF6;&#x5B58;&#x50A8;" class="anchor-navigation-ex-anchor" href="#&#x6587;&#x4EF6;&#x5B58;&#x50A8;"><i class="fa fa-link" aria-hidden="true"></i></a>7.2.6. &#x6587;&#x4EF6;&#x5B58;&#x50A8;</h3>
<pre><code class="lang-text">

</code></pre>
<h2 id="&#x5B58;&#x50A8;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;"><a name="&#x5B58;&#x50A8;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;" class="anchor-navigation-ex-anchor" href="#&#x5B58;&#x50A8;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;"><i class="fa fa-link" aria-hidden="true"></i></a>7.3. &#x5B58;&#x50A8;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;</h2>
<h3 id="&#x7A33;&#x5065;&#x6B63;&#x786E;&#x6027;&#x4F18;&#x5316;"><a name="&#x7A33;&#x5065;&#x6B63;&#x786E;&#x6027;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x7A33;&#x5065;&#x6B63;&#x786E;&#x6027;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>7.3.1. &#x7A33;&#x5065;&#x6B63;&#x786E;&#x6027;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x662F;&#x5426;&#x80FD;&#x65E0;&#x9519;&#x8BEF;&#x5730;&#x8FDB;&#x884C;&#x8BFB;&#x53D6;&#x548C;&#x6062;&#x590D;&#x3002;
&#x662F;&#x5426;&#x5B8C;&#x5584;&#x652F;&#x6301;&#x591A;&#x7EBF;&#x7A0B;&#x548C;&#x591A;&#x8FDB;&#x7A0B;&#x7684;&#x573A;&#x666F;&#x3002;
</code></pre>
<h3 id="&#x5B58;&#x50A8;&#x65F6;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;"><a name="&#x5B58;&#x50A8;&#x65F6;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x5B58;&#x50A8;&#x65F6;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>7.3.2. &#x5B58;&#x50A8;&#x65F6;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x5305;&#x62EC;CPU&#x65F6;&#x95F4;&#x548C;IO&#x65F6;&#x95F4;&#x3002;
&#x5982;&#x7F16;&#x89E3;&#x7801;&#x6216;&#x52A0;&#x89E3;&#x5BC6;&#x8FC7;&#x4E8E;&#x590D;&#x6742;&#xFF0C;&#x4F1A;&#x5F71;&#x54CD;CPU&#x65F6;&#x95F4;&#xFF1B;
</code></pre>
<h3 id="&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;"><a name="&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>7.3.3. &#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#x5F00;&#x9500;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x76F8;&#x540C;&#x6570;&#x636E;&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x7F16;&#x7801;&#x65B9;&#x5F0F;&#xFF0C;&#x5360;&#x7528;&#x7684;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#x4E5F;&#x4F1A;&#x4E0D;&#x540C;&#xFF1B;&#xFF08;&#x5982; XML &gt; JSON &gt; Protocol Buffer&#xFF09;
&#x8FD8;&#x53EF;&#x5F15;&#x5165;&#x538B;&#x7F29;&#x7B56;&#x7565;&#x8FDB;&#x4E00;&#x6B65;&#x51CF;&#x5C0F;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;.&#x5982; zip &#x3001; lzma
&#x8FD8;&#x9700;&#x8003;&#x8651;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x5360;&#x7528;&#x91CF;&#xFF0C;&#x662F;&#x5426;&#x4F1A;&#x5BFC;&#x81F4;&#x5927;&#x91CF;GC&#xFF0C;OOM&#x7B49;
</code></pre>
<h3 id="&#x5B58;&#x50A8;&#x6570;&#x636E;&#x5B89;&#x5168;&#x4F18;&#x5316;"><a name="&#x5B58;&#x50A8;&#x6570;&#x636E;&#x5B89;&#x5168;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x5B58;&#x50A8;&#x6570;&#x636E;&#x5B89;&#x5168;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>7.3.4. &#x5B58;&#x50A8;&#x6570;&#x636E;&#x5B89;&#x5168;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x4E00;&#x4E9B;&#x654F;&#x611F;&#x6570;&#x636E;&#x9700;&#x52A0;&#x5BC6;&#xFF0C;&#x9632;&#x6B62;&#x522B;&#x4EBA;&#x67E5;&#x770B;&#x3002;
&#x6839;&#x636E;&#x654F;&#x611F;&#x5EA6;&#xFF0C;&#x6570;&#x636E;&#x91CF;&#x5927;&#x5C0F;&#x7684;&#x4E0D;&#x540C;&#xFF0C;&#x9009;&#x62E9;&#x4E0D;&#x540C;&#x7684;&#x52A0;&#x5BC6;&#x65B9;&#x5F0F;&#x3002;
</code></pre>
<h3 id="&#x5B58;&#x50A8;&#x517C;&#x5BB9;&#x6027;&#x4F18;&#x5316;"><a name="&#x5B58;&#x50A8;&#x517C;&#x5BB9;&#x6027;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x5B58;&#x50A8;&#x517C;&#x5BB9;&#x6027;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>7.3.5. &#x5B58;&#x50A8;&#x517C;&#x5BB9;&#x6027;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x9700;&#x8981;&#x8003;&#x8651; &#x5411;&#x524D;&#x5411;&#x540E;&#x517C;&#x5BB9;&#xFF0C;&#x8001;&#x6570;&#x636E;&#x5728;&#x5347;&#x7EA7;&#x65F6;&#x662F;&#x5426;&#x80FD;&#x8FC1;&#x79FB;&#x8FC7;&#x6765;&#xFF0C;&#x65B0;&#x6570;&#x636E;&#x5728;&#x8001;&#x7248;&#x672C;&#x80FD;&#x5426;&#x964D;&#x7EA7;&#x4F7F;&#x7528; &#x3002;
&#x5B58;&#x50A8;&#x7684;&#x6570;&#x636E;&#x662F;&#x5426;&#x65B9;&#x4FBF;&#x8FC1;&#x79FB;&#x5230;&#x5176;&#x4ED6;&#x5E73;&#x53F0;&#x3002;
</code></pre>
<h3 id="&#x5F00;&#x53D1;&#x65F6;&#x95F4;&#x6210;&#x672C;&#x4F18;&#x5316;"><a name="&#x5F00;&#x53D1;&#x65F6;&#x95F4;&#x6210;&#x672C;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x5F00;&#x53D1;&#x65F6;&#x95F4;&#x6210;&#x672C;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>7.3.6. &#x5F00;&#x53D1;&#x65F6;&#x95F4;&#x6210;&#x672C;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x6709;&#x4E9B;&#x5B58;&#x50A8;&#x65B9;&#x6848;&#x867D;&#x9AD8;&#x5927;&#x4E0A;&#xFF0C;&#x4F46;&#x4E1A;&#x52A1;&#x843D;&#x5730;&#x6210;&#x672C;&#x9AD8;&#xFF0C;&#x5C3D;&#x91CF;&#x505A;&#x5230;&#x65E0;&#x7F1D;&#x63A5;&#x5165;&#xFF0C;&#x7F29;&#x51CF;&#x5F00;&#x53D1;&#x6210;&#x672C; &#x3002;
</code></pre>
<h1 id="&#x7F51;&#x7EDC;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><a name="&#x7F51;&#x7EDC;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x7F51;&#x7EDC;&#x4F18;&#x5316;-&#xFF08;&#x5B8C;&#x6210;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>8. &#x7F51;&#x7EDC;&#x4F18;&#x5316; &#xFF08;&#x5B8C;&#x6210;&#xFF09;</h1>
<h2 id="&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7684;&#x610F;&#x4E49;"><a name="&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7684;&#x610F;&#x4E49;" class="anchor-navigation-ex-anchor" href="#&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7684;&#x610F;&#x4E49;"><i class="fa fa-link" aria-hidden="true"></i></a>8.1. &#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7684;&#x610F;&#x4E49;</h2>
<pre><code class="lang-text">&#x7B49;&#x5F85;&#x7F51;&#x7EDC;&#x662F;&#x6211;&#x4EEC; App &#x6700;&#x5927;&#x7684;&#x6027;&#x80FD;&#x74F6;&#x9888;&#xFF0C;
&#x518D;&#x600E;&#x4E48;&#x4F18;&#x5316;&#x7ED8;&#x5236;&#x3001;&#x5185;&#x5B58;&#x3001;&#x5361;&#x987F;&#x6216;&#x5176;&#x5B83;&#x65B9;&#x9762;&#xFF0C;&#x4E5F;&#x62B5;&#x4E0D;&#x4E0A;&#x7F51;&#x7EDC;&#x4F18;&#x5316;,
&#x800C;&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x6700;&#x6838;&#x5FC3;&#x7684;&#x5904;&#x7406;&#x65B9;&#x5F0F;&#x5C31;&#x662F; 
&#x6D88;&#x9664;&#x548C;&#x51CF;&#x5C11;&#x4E0D;&#x5FC5;&#x8981;&#x7684;&#x7F51;&#x7EDC;&#x5EF6;&#x8FDF;&#xFF0C;&#x628A;&#x4F20;&#x8F93;&#x7684;&#x5B57;&#x8282;&#x6570;&#x964D;&#x5230;&#x6700;&#x5C11;&#x3002;
</code></pre>
<h2 id="&#x7F51;&#x7EDC;&#x6027;&#x80FD;&#x6307;&#x6807;"><a name="&#x7F51;&#x7EDC;&#x6027;&#x80FD;&#x6307;&#x6807;" class="anchor-navigation-ex-anchor" href="#&#x7F51;&#x7EDC;&#x6027;&#x80FD;&#x6307;&#x6807;"><i class="fa fa-link" aria-hidden="true"></i></a>8.2. &#x7F51;&#x7EDC;&#x6027;&#x80FD;&#x6307;&#x6807;</h2>
<h3 id="&#x901F;&#x7387;"><a name="&#x901F;&#x7387;" class="anchor-navigation-ex-anchor" href="#&#x901F;&#x7387;"><i class="fa fa-link" aria-hidden="true"></i></a>8.2.1. &#x901F;&#x7387;</h3>
<pre><code class="lang-text">// &#x901F;&#x7387; 
&#x5373; bps &lt;==&gt;  bit/s
&#x4E3A;&#x4EC0;&#x4E48;&#x7535;&#x4FE1;&#x62C9;&#x7684; 100M &#x5149;&#x7EA4;&#xFF0C;&#x6D4B;&#x8BD5;&#x5CF0;&#x503C;&#x901F;&#x5EA6;&#x53EA;&#x6709; 12M &#x6BCF;&#x79D2;&#xFF1F;
&#x7F51;&#x7EDC;&#x5E38;&#x7528;&#x5355;&#x4F4D;&#x662F; Mbps &#xFF0C;&#x56E0;&#x6B64;&#x8FD9;&#x91CC;&#x7684; 100M &#x6307;&#x7684;&#x662F; 100 Mbps&#x3002;
100 M/S = 100 Mbps = 100 Mbit/s
100 Mbit/s = &#xFF08;100/8&#xFF09;MB/s = 12.5 MB/s
</code></pre>
<h3 id="&#x65F6;&#x5EF6;"><a name="&#x65F6;&#x5EF6;" class="anchor-navigation-ex-anchor" href="#&#x65F6;&#x5EF6;"><i class="fa fa-link" aria-hidden="true"></i></a>8.2.2. &#x65F6;&#x5EF6;</h3>
<pre><code class="lang-text">// &#x53D1;&#x9001;&#x65F6;&#x5EF6;
&#x53D1;&#x9001;&#x65F6;&#x5EF6; = &#x6570;&#x636E;&#x957F;&#x5EA6;&#xFF08;bit&#xFF09;/ &#x53D1;&#x9001;&#x901F;&#x7387;&#xFF08;bit/s&#xFF09;

// &#x4F20;&#x8F93;&#x65F6;&#x5EF6;
&#x4F20;&#x64AD;&#x65F6;&#x5EF6; = &#x4F20;&#x8F93;&#x8DEF;&#x5F84;&#x8DDD;&#x79BB; / &#x4F20;&#x64AD;&#x901F;&#x7387;&#xFF08;bit/s&#xFF09;

// &#x6392;&#x961F;&#x65F6;&#x5EF6;
&#x6570;&#x636E;&#x5305;&#x5728;&#x7F51;&#x7EDC;&#x8BBE;&#x5907;&#x4E2D;&#x7B49;&#x5F85;&#x88AB;&#x5904;&#x7406;&#x7684;&#x65F6;&#x95F4;&#xFF0C;
&#x4F8B;&#x5982;&#x8DEF;&#x7531;&#x5668;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x4E00;&#x4E2A;&#x5904;&#x7406;&#x5B8C;&#x524D;&#x9762;&#x7684;&#x6570;&#x636E;&#x5305;&#x624D;&#x80FD;&#x5904;&#x7406;&#x540E;&#x9762;&#x7684;&#x3002;

// &#x5904;&#x7406;&#x65F6;&#x5EF6;
&#x6570;&#x636E;&#x5305;&#x5230;&#x8FBE;&#x8BBE;&#x5907;&#x6216;&#x8005;&#x76EE;&#x7684;&#x673A;&#x5668;&#x88AB;&#x5904;&#x7406;&#x6240;&#x9700;&#x7684;&#x65F6;&#x95F4;&#x3002;
&#x603B;&#x65F6;&#x5EF6; = &#x53D1;&#x9001;&#x65F6;&#x5EF6; + &#x6392;&#x961F;&#x65F6;&#x5EF6; + &#x4F20;&#x64AD;&#x65F6;&#x5EF6; + &#x5904;&#x7406;&#x65F6;&#x5EF6;
</code></pre>
<h3 id="&#x5F80;&#x8FD4;&#x65F6;&#x95F4;-rtt-&#xFF08;route-trip-time&#xFF09;"><a name="&#x5F80;&#x8FD4;&#x65F6;&#x95F4;-rtt-&#xFF08;route-trip-time&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x5F80;&#x8FD4;&#x65F6;&#x95F4;-rtt-&#xFF08;route-trip-time&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>8.2.3. &#x5F80;&#x8FD4;&#x65F6;&#x95F4; RTT &#xFF08;Route-Trip Time&#xFF09;</h3>
<pre><code class="lang-text">&#x8BC4;&#x4F30;&#x7F51;&#x7EDC;&#x8D28;&#x91CF;&#x7684;&#x4E00;&#x9879;&#x91CD;&#x8981;&#x6307;&#x6807;&#x3002;
&#x8868;&#x793A;&#x6570;&#x636E;&#x62A5;&#x6587;&#x5728;&#x7AEF;&#x5230;&#x7AEF;&#x901A;&#x4FE1;&#x4E2D;&#x6765;&#x56DE;&#x4E00;&#x6B21;&#x7684;&#x65F6;&#x95F4;&#x3002;
&#x901A;&#x5E38;&#x4F7F;&#x7528; ping &#x547D;&#x4EE4;&#x67E5;&#x770B; RTT
</code></pre>
<h3 id="&#x5E26;&#x5BBD;"><a name="&#x5E26;&#x5BBD;" class="anchor-navigation-ex-anchor" href="#&#x5E26;&#x5BBD;"><i class="fa fa-link" aria-hidden="true"></i></a>8.2.4. &#x5E26;&#x5BBD;</h3>
<pre><code class="lang-text">&#x903B;&#x8F91;&#x6216;&#x7269;&#x7406;&#x901A;&#x901A;&#x4FE1;&#x8DEF;&#x5F84;&#x7684;&#x6700;&#x5927;&#x541E;&#x5410;&#x91CF;&#x3002;
</code></pre>
<h2 id="&#x7F51;&#x7EDC;&#x76D1;&#x542C;&#x4F18;&#x5316;&#x5E38;&#x7528;&#x5DE5;&#x5177;"><a name="&#x7F51;&#x7EDC;&#x76D1;&#x542C;&#x4F18;&#x5316;&#x5E38;&#x7528;&#x5DE5;&#x5177;" class="anchor-navigation-ex-anchor" href="#&#x7F51;&#x7EDC;&#x76D1;&#x542C;&#x4F18;&#x5316;&#x5E38;&#x7528;&#x5DE5;&#x5177;"><i class="fa fa-link" aria-hidden="true"></i></a>8.3. &#x7F51;&#x7EDC;&#x76D1;&#x542C;&#x4F18;&#x5316;&#x5E38;&#x7528;&#x5DE5;&#x5177;</h2>
<h3 id="network-profiler"><a name="network-profiler" class="anchor-navigation-ex-anchor" href="#network-profiler"><i class="fa fa-link" aria-hidden="true"></i></a>8.3.1. Network Profiler</h3>
<pre><code class="lang-text">&#x4F7F;&#x7528; Androidstudio &#x81EA;&#x5E26;&#x7684; &#x76D1;&#x63A7;&#x5DE5;&#x5177; Profiler&#xFF0C;&#x5176;&#x4E2D;&#x6709; &#x7F51;&#x7EDC;&#x76D1;&#x63A7;&#x6A21;&#x5757;&#x3002;
</code></pre>
<h3 id="&#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177;--charles--&#x5C0F;&#x8336;&#x58F6;-"><a name="&#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177;--charles--&#x5C0F;&#x8336;&#x58F6;-" class="anchor-navigation-ex-anchor" href="#&#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177;--charles--&#x5C0F;&#x8336;&#x58F6;-"><i class="fa fa-link" aria-hidden="true"></i></a>8.3.2. &#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177;  charles ( &#x5C0F;&#x8336;&#x58F6; )</h3>
<pre><code class="lang-text">https://www.charlesproxy.com/download/
</code></pre>
<h3 id="&#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177;-wireshark"><a name="&#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177;-wireshark" class="anchor-navigation-ex-anchor" href="#&#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177;-wireshark"><i class="fa fa-link" aria-hidden="true"></i></a>8.3.3. &#x7B2C;&#x4E09;&#x65B9;&#x6293;&#x5305;&#x5DE5;&#x5177; Wireshark</h3>
<pre><code class="lang-text">https://www.wireshark.org
</code></pre>
<h3 id="linux-&#x547D;&#x4EE4;&#x5DE5;&#x5177;-tcpdump"><a name="linux-&#x547D;&#x4EE4;&#x5DE5;&#x5177;-tcpdump" class="anchor-navigation-ex-anchor" href="#linux-&#x547D;&#x4EE4;&#x5DE5;&#x5177;-tcpdump"><i class="fa fa-link" aria-hidden="true"></i></a>8.3.4. Linux &#x547D;&#x4EE4;&#x5DE5;&#x5177; TcpDump</h3>
<pre><code class="lang-text">yum install -y tcpdump
</code></pre>
<h3 id="facebook-&#x7684;&#x5DE5;&#x5177;-stetho"><a name="facebook-&#x7684;&#x5DE5;&#x5177;-stetho" class="anchor-navigation-ex-anchor" href="#facebook-&#x7684;&#x5DE5;&#x5177;-stetho"><i class="fa fa-link" aria-hidden="true"></i></a>8.3.5. Facebook &#x7684;&#x5DE5;&#x5177; Stetho</h3>
<pre><code class="lang-text">http://facebook.github.io/stetho/
Stetho &#x662F;Facebook&#x63A8;&#x51FA;&#x7684;&#x4E00;&#x6B3E;
&#x4F7F;&#x7528; Chrome &#x6765;&#x8C03;&#x8BD5;Android Application&#x7684;&#x5DE5;&#x5177;&#x3002;
&#x6700;&#x4E3B;&#x8981;&#x7684;&#x7528;&#x9014;&#xFF1A;&#x67E5;&#x770B;&#x6570;&#x636E;&#x5E93;&#x3001;&#x67E5;&#x770B;&#x7F51;&#x7EDC;
</code></pre>
<h3 id="networkstatsmanager---android-api-"><a name="networkstatsmanager---android-api-" class="anchor-navigation-ex-anchor" href="#networkstatsmanager---android-api-"><i class="fa fa-link" aria-hidden="true"></i></a>8.3.6. NetworkStatsManager  ( Android api )</h3>
<pre><code class="lang-text">Android 6.0&#xFF08;API23&#xFF09;&#x4E2D;&#x65B0;&#x589E;&#x52A0; NetworkStatsManager&#xFF0C;
&#x63D0;&#x4F9B;&#x7F51;&#x7EDC;&#x4F7F;&#x7528;&#x5386;&#x53F2;&#x7EDF;&#x8BA1;&#x4FE1;&#x606F;&#xFF0C; &#x53EF;&#x67E5;&#x8BE2;&#x6307;&#x5B9A;&#x65F6;&#x95F4;&#x95F4;&#x9694;&#x5185;&#x7684;&#x7EDF;&#x8BA1;&#x4FE1;&#x606F;&#x3002;
</code></pre>
<h3 id="trafficstats--android-api-"><a name="trafficstats--android-api-" class="anchor-navigation-ex-anchor" href="#trafficstats--android-api-"><i class="fa fa-link" aria-hidden="true"></i></a>8.3.7. TrafficStats ( Android api )</h3>
<pre><code class="lang-text">android2.2 &#x52A0;&#x5165;&#x4E86; TrafficStats&#x7C7B;&#xFF0C;
&#x53EF;&#x4EE5;&#x8F7B;&#x677E;&#x83B7;&#x53D6;&#x6D41;&#x91CF;&#x4FE1;&#x606F;&#xFF0C;
TrafficStats &#x7C7B;&#x4E5F;&#x662F;&#x8BFB;&#x53D6; Linux &#x63D0;&#x4F9B;&#x7684;&#x6587;&#x4EF6;&#x5BF9;&#x8C61;&#x7CFB;&#x7EDF;&#x7C7B;&#x578B;&#x7684;&#x6587;&#x672C;&#x8FDB;&#x884C;&#x89E3;&#x6790;&#x3002;

// &#x4ECE;&#x5F00;&#x673A;&#x5F00;&#x59CB;Mobile&#x7F51;&#x7EDC;&#x63A5;&#x6536;&#x7684;&#x5B57;&#x8282;&#x603B;&#x6570;&#xFF0C;&#x4E0D;&#x5305;&#x62EC;Wifi
getMobileRxBytes()        
// &#x4ECE;&#x5F00;&#x673A;&#x5F00;&#x59CB;&#x6240;&#x6709;&#x7F51;&#x7EDC;&#x63A5;&#x6536;&#x7684;&#x5B57;&#x8282;&#x603B;&#x6570;&#xFF0C;&#x5305;&#x62EC;Wifi
getTotalRxBytes()     
// &#x4ECE;&#x5F00;&#x673A;&#x5F00;&#x59CB;Mobile&#x7F51;&#x7EDC;&#x53D1;&#x9001;&#x7684;&#x5B57;&#x8282;&#x603B;&#x6570;&#xFF0C;&#x4E0D;&#x5305;&#x62EC;Wifi
getMobileTxBytes()        
// &#x4ECE;&#x5F00;&#x673A;&#x5F00;&#x59CB;&#x6240;&#x6709;&#x7F51;&#x7EDC;&#x53D1;&#x9001;&#x7684;&#x5B57;&#x8282;&#x603B;&#x6570;&#xFF0C;&#x5305;&#x62EC;Wifi
getTotalTxBytes()
</code></pre>
<h2 id="&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7EAC;&#x5EA6;"><a name="&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7EAC;&#x5EA6;" class="anchor-navigation-ex-anchor" href="#&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7EAC;&#x5EA6;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4. &#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x7EAC;&#x5EA6;</h2>
<h3 id="&#x9488;&#x5BF9;-&#x786C;&#x4EF6;-&#x8F6F;&#x4EF6;&#x6210;&#x672C;-&#x4F18;&#x5316;"><a name="&#x9488;&#x5BF9;-&#x786C;&#x4EF6;-&#x8F6F;&#x4EF6;&#x6210;&#x672C;-&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x9488;&#x5BF9;-&#x786C;&#x4EF6;-&#x8F6F;&#x4EF6;&#x6210;&#x672C;-&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.1. &#x9488;&#x5BF9; &#x786C;&#x4EF6; &#x8F6F;&#x4EF6;&#x6210;&#x672C; &#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x5E26;&#x5BBD;&#x3001;&#x670D;&#x52A1;&#x5668;&#x6570;&#x91CF;&#x3001;CDN&#x3001;&#x8017;&#x7535;
</code></pre>
<h3 id="&#x9488;&#x5BF9;-&#x6D41;&#x91CF;&#x6D88;&#x8017;&#x76D1;&#x63A7;-&#x5E76;&#x9488;&#x5BF9;&#x4F18;&#x5316;"><a name="&#x9488;&#x5BF9;-&#x6D41;&#x91CF;&#x6D88;&#x8017;&#x76D1;&#x63A7;-&#x5E76;&#x9488;&#x5BF9;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x9488;&#x5BF9;-&#x6D41;&#x91CF;&#x6D88;&#x8017;&#x76D1;&#x63A7;-&#x5E76;&#x9488;&#x5BF9;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.2. &#x9488;&#x5BF9; &#x6D41;&#x91CF;&#x6D88;&#x8017;&#x76D1;&#x63A7; &#x5E76;&#x9488;&#x5BF9;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x7CBE;&#x786E;&#x83B7;&#x53D6;&#x7F51;&#x7EDC;&#x6D41;&#x91CF;&#x7684;&#x6D88;&#x8017;&#x91CF;&#xFF0C;&#x89E3;&#x51B3;&#x6574;&#x4F53;&#x5747;&#x503C;&#x63A9;&#x76D6;&#x5355;&#x70B9;&#x5F02;&#x5E38;&#x6D41;&#x91CF;&#x7684;&#x95EE;&#x9898;&#x3002;
1&#x3001;&#x7CBE;&#x51C6;&#x83B7;&#x53D6;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x7684;&#x6D41;&#x91CF;&#x6D88;&#x8017;&#x3001;&#x7F51;&#x7EDC;&#x7C7B;&#x578B;&#x3001;&#x524D;&#x540E;&#x53F0;&#x3002;
2&#x3001;&#x7528;&#x6237;&#x6D41;&#x91CF;&#x6D88;&#x8017;&#x5747;&#x503C;&#x3001;&#x5F02;&#x5E38;&#x7387;&#xFF08;&#x6D88;&#x8017;&#x591A;&#x3001;&#x6B21;&#x6570;&#x591A;&#xFF09;&#x3002;
3&#x3001;&#x5B8C;&#x6574;&#x94FE;&#x8DEF;&#x5168;&#x76D1;&#x63A7;&#x3001;&#x4E3B;&#x52A8;&#x4E0A;&#x62A5;&#x3002;
</code></pre>
<h3 id="&#x9488;&#x5BF9;-&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x8D28;&#x91CF;&#x3001;&#x6210;&#x529F;&#x7387;&#x4F18;&#x5316;"><a name="&#x9488;&#x5BF9;-&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x8D28;&#x91CF;&#x3001;&#x6210;&#x529F;&#x7387;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x9488;&#x5BF9;-&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x8D28;&#x91CF;&#x3001;&#x6210;&#x529F;&#x7387;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.3. &#x9488;&#x5BF9; &#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x8D28;&#x91CF;&#x3001;&#x6210;&#x529F;&#x7387;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">1&#x3001;&#x8BF7;&#x6C42;&#x65F6;&#x957F;&#x3001;&#x4E1A;&#x52A1;&#x6210;&#x529F;&#x7387;&#x3001;&#x5931;&#x8D25;&#x7387;&#x3001;TOP &#x5931;&#x8D25;&#x63A5;&#x53E3;&#xFF0C;
&#x5BFC;&#x81F4;&#x8BF7;&#x6C42;&#x5931;&#x8D25;&#x7684;&#x539F;&#x56E0;&#x901A;&#x5E38;&#x6709;&#x4E24;&#x79CD;&#x60C5;&#x51B5;&#xFF1A;
&#x2460;&#x3001;&#x5F31;&#x4FE1;&#x53F7;&#xFF1A;
&#x53EF;&#x4EE5;&#x7B80;&#x5355;&#x770B;&#x6210;&#x624B;&#x673A;&#x4FE1;&#x53F7;&#x53EA;&#x6709;&#x4E00;&#x4E24;&#x683C;&#x7684;&#x65F6;&#x5019;&#xFF0C;
&#x8FD9;&#x65F6;&#x4E0D;&#x4EC5;&#x4EC5;&#x662F;&#x4FE1;&#x4EE4;&#x53D1;&#x51FA;&#x53BB;&#x56F0;&#x96BE;&#xFF0C;&#x8FD8;&#x53EF;&#x80FD;&#x5BFC;&#x81F4;&#x4E0D;&#x65AD;&#x5207;&#x6362;&#x7F51;&#x7EDC;&#x3001;&#x57FA;&#x7AD9;&#x3002;
App &#x53EA;&#x80FD;&#x5728;&#x5E94;&#x7528;&#x5C42;&#x505A;&#x91CD;&#x8BD5;&#xFF0C;&#x56E0;&#x4E3A;&#x5F31;&#x4FE1;&#x53F7;&#x4E00;&#x822C;&#x90FD;&#x662F;&#x4E00;&#x65F6;&#x7684;&#x3002;

&#x2461;&#x3001;&#x62E5;&#x585E;&#x7F51;&#x7EDC;
&#x53EF;&#x4EE5;&#x7C7B;&#x6BD4;&#x4E3A;&#x5835;&#x8F66;&#x3001;&#x6392;&#x961F;&#x7684;&#x573A;&#x666F;&#xFF0C;&#x6570;&#x636E;&#x5305;&#x6392;&#x961F;&#xFF0C;&#x4FE1;&#x4EE4;&#x4E5F;&#x5728;&#x6392;&#x961F;&#x3002;
&#x8FD9;&#x65F6; App &#x4E0D;&#x65AD;&#x91CD;&#x8BD5;&#xFF0C;&#x53EA;&#x4F1A;&#x4F7F;&#x5F97;&#x62E5;&#x585E;&#x7F51;&#x7EDC;&#x66F4;&#x4E3A;&#x4E25;&#x91CD;&#x3002;
&#x6211;&#x4EEC;&#x53EA;&#x80FD;&#x8BA9;&#x81EA;&#x5DF1;&#x7684;&#x975E;&#x6838;&#x5FC3;&#x4E1A;&#x52A1;&#x4E0D;&#x8981;&#x53BB;&#x6392;&#x961F;&#xFF0C;&#x5E76;&#x8BA9;&#x6838;&#x5FC3;&#x4E1A;&#x52A1;&#x7684;&#x6570;&#x636E;&#x91CF;&#x66F4;&#x5C11;&#xFF0C;&#x534F;&#x8BAE;&#x6765;&#x56DE;&#x66F4;&#x5C11;&#x3002;

2&#x3001;&#x5728;&#x5F31;&#x7F51;&#x3001;&#x7F51;&#x7EDC;&#x4E0D;&#x7A33;&#x5B9A;&#x65F6;&#xFF0C;&#x8981;&#x6700;&#x5927;&#x7A0B;&#x5EA6;&#x4E0A;&#x4FDD;&#x8BC1;&#x7F51;&#x7EDC;&#x7684;&#x8FDE;&#x901A;&#x6027;&#x3002;
</code></pre>
<h3 id="&#x7F51;&#x7EDC;&#x4FE1;&#x606F;&#x5B89;&#x5168;&#x4F18;&#x5316;"><a name="&#x7F51;&#x7EDC;&#x4FE1;&#x606F;&#x5B89;&#x5168;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x7F51;&#x7EDC;&#x4FE1;&#x606F;&#x5B89;&#x5168;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>8.4.4. &#x7F51;&#x7EDC;&#x4FE1;&#x606F;&#x5B89;&#x5168;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x8981;&#x786E;&#x4FDD;&#x4EA4;&#x4E92;&#x7684;&#x4FE1;&#x606F;&#x4E0D;&#x88AB;&#x7B2C;&#x4E09;&#x65B9;&#x52AB;&#x6301;&#x3001;&#x7A83;&#x542C;&#x751A;&#x81F3;&#x7BE1;&#x6539;&#x3002;
</code></pre>
<h2 id="&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x529E;&#x6CD5;"><a name="&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x529E;&#x6CD5;" class="anchor-navigation-ex-anchor" href="#&#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x529E;&#x6CD5;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5. &#x7F51;&#x7EDC;&#x4F18;&#x5316;&#x529E;&#x6CD5;</h2>
<pre><code class="lang-text">TCP &#x7684;&#x74F6;&#x9888;&#x90FD;&#x662F;&#x5EF6;&#x8FDF;&#xFF0C;&#x800C;&#x975E;&#x5E26;&#x5BBD;&#x3002;
1&#x3001;TCP &#x4E09;&#x6B21;&#x63E1;&#x624B;&#x589E;&#x52A0;&#x4E86;&#x6574;&#x6574;&#x4E00;&#x6B21;&#x5F80;&#x8FD4;&#x65F6;&#x95F4;;
2&#x3001;TCP &#x6D41;&#x91CF;&#x53CA;&#x62E5;&#x585E;&#x63A7;&#x5236;&#x4F1A;&#x5F71;&#x54CD;&#x6240;&#x6709;&#x8FDE;&#x63A5;&#x7684;&#x541E;&#x5410;&#x91CF;;
3&#x3001;TCP &#x7684;&#x541E;&#x5410;&#x91CF;&#x7531;&#x5F53;&#x524D;&#x62E5;&#x585E;&#x7A97;&#x53E3;&#x5927;&#x5C0F;&#x63A7;&#x5236;&#x3002;
</code></pre>
<h3 id="&#x642D;&#x5EFA;&#x6216;&#x8005;&#x8D2D;&#x4E70;-cnd-&#x5185;&#x5BB9;&#x5206;&#x53D1;&#x670D;&#x52A1;"><a name="&#x642D;&#x5EFA;&#x6216;&#x8005;&#x8D2D;&#x4E70;-cnd-&#x5185;&#x5BB9;&#x5206;&#x53D1;&#x670D;&#x52A1;" class="anchor-navigation-ex-anchor" href="#&#x642D;&#x5EFA;&#x6216;&#x8005;&#x8D2D;&#x4E70;-cnd-&#x5185;&#x5BB9;&#x5206;&#x53D1;&#x670D;&#x52A1;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.1. &#x642D;&#x5EFA;&#x6216;&#x8005;&#x8D2D;&#x4E70; CND &#x5185;&#x5BB9;&#x5206;&#x53D1;&#x670D;&#x52A1;</h3>
<pre><code class="lang-text">CDN ( Content Delivery Network  )
&#x901A;&#x8FC7;&#x5728;&#x4E0D;&#x540C;&#x7684;&#x5730;&#x533A;&#x90E8;&#x7F72;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x628A;&#x6570;&#x636E;&#x653E;&#x5230;&#x63A5;&#x8FD1;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x5730;&#x65B9;&#xFF0C;
&#x53EF;&#x4EE5;&#x51CF;&#x5C11;&#x7F51;&#x7EDC;&#x5F80;&#x8FD4;&#x7684;&#x5EF6;&#x8FDF;&#xFF0C;&#x4ECE;&#x800C;&#x663E;&#x8457;&#x63D0;&#x5347; TCP &#x6027;&#x80FD;&#x3002;
</code></pre>
<h3 id="&#x8FDE;&#x63A5;&#x91CD;&#x7528;-tcp"><a name="&#x8FDE;&#x63A5;&#x91CD;&#x7528;-tcp" class="anchor-navigation-ex-anchor" href="#&#x8FDE;&#x63A5;&#x91CD;&#x7528;-tcp"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.2. &#x8FDE;&#x63A5;&#x91CD;&#x7528; (tcp)</h3>
<pre><code class="lang-text">&#x4E09;&#x6B21;&#x63E1;&#x624B;&#x5E26;&#x6765;&#x7684;&#x5EF6;&#x8FDF;&#x4F7F;&#x5F97;&#x6BCF;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0; TCP &#x8FDE;&#x63A5;&#x90FD;&#x8981;&#x4ED8;&#x51FA;&#x5F88;&#x5927;&#x4EE3;&#x4EF7;&#x3002;
&#x800C;&#x8FD9;&#x4E5F;&#x51B3;&#x5B9A;&#x4E86;&#x63D0;&#x9AD8; TCP &#x5E94;&#x7528;&#x6027;&#x80FD;&#x7684;&#x5173;&#x952E;&#xFF0C;&#x5728;&#x4E8E;&#x60F3;&#x529E;&#x6CD5;&#x91CD;&#x7528;&#x8FDE;&#x63A5;&#x3002;
</code></pre>
<h3 id="&#x4F7F;&#x7528;-tfotcp-fast-open---tcp"><a name="&#x4F7F;&#x7528;-tfotcp-fast-open---tcp" class="anchor-navigation-ex-anchor" href="#&#x4F7F;&#x7528;-tfotcp-fast-open---tcp"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.3. &#x4F7F;&#x7528; TFO(TCP Fast Open)  -(tcp)</h3>
<pre><code class="lang-text">TFO &#x81F4;&#x529B;&#x4E8E;&#x51CF;&#x5C11;&#x65B0;&#x5EFA; TCP &#x8FDE;&#x63A5;&#x5E26;&#x6765;&#x7684;&#x6027;&#x80FD;&#x635F;&#x5931;&#x3002;
&#x4F46;&#x5374;&#x53EA;&#x80FD;&#x5728;&#x67D0;&#x4E9B;&#x60C5;&#x51B5;&#x4E0B;&#x6709;&#x6548;&#x3002;
&#x6CE8;&#x610F; TFO &#x9700;&#x8981;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x5668;&#x5171;&#x540C;&#x652F;&#x6301;&#x3002;
</code></pre>
<h3 id="tcp&#x7A97;&#x53E3;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x200B;-tcp"><a name="tcp&#x7A97;&#x53E3;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x200B;-tcp" class="anchor-navigation-ex-anchor" href="#tcp&#x7A97;&#x53E3;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x200B;-tcp"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.4. TCP&#x7A97;&#x53E3;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x200B; (tcp)</h3>
<pre><code class="lang-text">TCP&#x5728;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x65F6;&#x548C; windows size &#x5173;&#x7CFB;&#x5BC6;&#x5207;&#xFF0C;&#x672C;&#x8EAB;&#x7A97;&#x53E3;&#x7528;&#x6765;&#x63A7;&#x5236;&#x6D41;&#x91CF;&#xFF0C;
&#x5728;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x53D1;&#x9001;&#x65B9;&#x6570;&#x636E;&#x8D85;&#x8FC7;&#x63A5;&#x6536;&#x65B9;&#x5C31;&#x4F1A;&#x4E22;&#x5305;&#xFF0C;
&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x8981;&#x6C42;&#x6570;&#x636E;&#x4F20;&#x8F93;&#x53CC;&#x65B9;&#x5728;&#x6BCF;&#x6B21;&#x4EA4;&#x4E92;&#x65F6;&#x58F0;&#x660E;&#x5404;&#x81EA;&#x7684;&#x63A5;&#x6536;&#x7A97;&#x53E3;&#x300C;rwnd&#x300D;&#x5927;&#x5C0F;&#xFF0C;
&#x7528;&#x6765;&#x8868;&#x793A;&#x81EA;&#x5DF1;&#x6700;&#x5927;&#x80FD;&#x4FDD;&#x5B58;&#x591A;&#x5C11;&#x6570;&#x636E;&#xFF0C;&#x8FD9;&#x4E3B;&#x8981;&#x662F;&#x9488;&#x5BF9;&#x63A5;&#x6536;&#x65B9;&#x800C;&#x8A00;&#x7684;&#xFF0C;
&#x901A;&#x4FD7;&#x70B9;&#x513F;&#x8BF4;&#x5C31;&#x662F;&#x8BA9;&#x53D1;&#x9001;&#x65B9;&#x77E5;&#x9053;&#x63A5;&#x6536;&#x65B9;&#x80FD;&#x5403;&#x51E0;&#x7897;&#x996D;&#xFF0C;&#x5982;&#x679C;&#x7A97;&#x53E3;&#x8870;&#x51CF;&#x5230;&#x96F6;&#xFF0C;
&#x4E5F;&#x5C31;&#x662F;&#x53D1;&#x9001;&#x65B9;&#x4E0D;&#x80FD;&#x518D;&#x53D1;&#x4E86;&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x8BF4;&#x660E;&#x5403;&#x9971;&#x4E86;&#xFF0C;
&#x5FC5;&#x987B;&#x6D88;&#x5316;&#x6D88;&#x5316;&#xFF0C;&#x5982;&#x679C;&#x786C;&#x6491;&#x80C0;&#x6F0F;&#x4E86;&#xFF0C;&#x90A3;&#x5C31;&#x662F;&#x4E22;&#x5305;&#x4E86;&#x3002;
</code></pre>
<h3 id="&#x6162;&#x542F;&#x52A8;-tcp"><a name="&#x6162;&#x542F;&#x52A8;-tcp" class="anchor-navigation-ex-anchor" href="#&#x6162;&#x542F;&#x52A8;-tcp"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.5. &#x6162;&#x542F;&#x52A8; (tcp)</h3>
<pre><code class="lang-text">&#x867D;&#x7136;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x53D1;&#x9001;&#x65B9;&#x8FC7;&#x8F7D;&#x63A5;&#x6536;&#x65B9;&#xFF0C;&#x4F46;&#x662F;&#x5374;&#x65E0;&#x6CD5;&#x907F;&#x514D;&#x8FC7;&#x8F7D;&#x7F51;&#x7EDC;&#xFF0C;
&#x8FD9;&#x662F;&#x56E0;&#x4E3A;&#x63A5;&#x6536;&#x7A97;&#x53E3;&#x300C;rwnd&#x300D;&#x53EA;&#x53CD;&#x6620;&#x4E86;&#x670D;&#x52A1;&#x5668;&#x4E2A;&#x4F53;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x5374;&#x65E0;&#x6CD5;&#x53CD;&#x6620;&#x7F51;&#x7EDC;&#x6574;&#x4F53;&#x7684;&#x60C5;&#x51B5;&#x3002;
&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x7F51;&#x7EDC;&#x8FC7;&#x8F7D;&#xFF0C;&#x6162;&#x542F;&#x52A8;&#x5F15;&#x5165;&#x4E86;&#x62E5;&#x585E;&#x7A97;&#x53E3;&#x300C;cwnd&#x300D;&#x7684;&#x6982;&#x5FF5;&#xFF0C;
&#x7528;&#x6765;&#x8868;&#x793A;&#x53D1;&#x9001;&#x65B9;&#x5728;&#x5F97;&#x5230;&#x63A5;&#x6536;&#x65B9;&#x786E;&#x8BA4;&#x524D; &#x6700;&#x5927;&#x5141;&#x8BB8;&#x4F20;&#x8F93;&#x7684;&#x672A;&#x7ECF;&#x786E;&#x8BA4;&#x7684;&#x6570;&#x636E;&#x3002;
&#x300C;cwnd&#x300D;&#x540C;&#x300C;rwnd&#x300D;&#x76F8;&#x6BD4;&#x4E0D;&#x540C;&#x7684;&#x662F;&#xFF1A;&#x5B83;&#x53EA;&#x662F;&#x53D1;&#x9001;&#x65B9;&#x7684;&#x4E00;&#x4E2A;&#x5185;&#x90E8;&#x53C2;&#x6570;&#xFF0C;&#x65E0;&#x9700;&#x901A;&#x77E5;&#x7ED9;&#x63A5;&#x6536;&#x65B9;&#xFF0C;
&#x5176;&#x521D;&#x59CB;&#x503C;&#x5F80;&#x5F80;&#x6BD4;&#x8F83;&#x5C0F;&#xFF0C;&#x7136;&#x540E;&#x968F;&#x7740;&#x6570;&#x636E;&#x5305;&#x88AB;&#x63A5;&#x6536;&#x65B9;&#x786E;&#x8BA4;&#xFF0C;&#x7A97;&#x53E3;&#x6210;&#x500D;&#x6269;&#x5927;&#xFF0C;
&#x6709;&#x70B9;&#x7C7B;&#x4F3C;&#x4E8E;&#x62F3;&#x51FB;&#x6BD4;&#x8D5B;&#xFF0C;&#x5F00;&#x59CB;&#x65F6;&#x4E0D;&#x4E86;&#x89E3;&#x654C;&#x60C5;&#xFF0C;&#x5F80;&#x5F80;&#x662F;&#x6B21;&#x62F3;&#x8BD5;&#x63A2;&#xFF0C;
&#x6162;&#x6162;&#x5FC3;&#x91CC;&#x6709;&#x5E95;&#x4E86;&#xFF0C;&#x5F00;&#x59CB;&#x9010;&#x6E10;&#x52A0;&#x5927;&#x91CD;&#x62F3;&#x8FDB;&#x653B;&#x7684;&#x529B;&#x5EA6;&#x3002;
&#x5728;&#x6162;&#x542F;&#x52A8;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x968F;&#x7740;&#x300C;cwnd&#x300D;&#x7684;&#x589E;&#x52A0;&#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x51FA;&#x73B0;&#x7F51;&#x7EDC;&#x8FC7;&#x8F7D;&#xFF0C;
&#x5176;&#x5916;&#x5728;&#x8868;&#x73B0;&#x5C31;&#x662F;&#x4E22;&#x5305;&#xFF0C;&#x4E00;&#x65E6;&#x51FA;&#x73B0;&#x6B64;&#x7C7B;&#x95EE;&#x9898;&#xFF0C;
&#x300C;cwnd&#x300D;&#x7684;&#x5927;&#x5C0F;&#x4F1A;&#x8FC5;&#x901F;&#x8870;&#x51CF;&#xFF0C;&#x4EE5;&#x4FBF;&#x7F51;&#x7EDC;&#x80FD;&#x591F;&#x7F13;&#x8FC7;&#x6765;
</code></pre>
<h3 id="&#x538B;&#x7F29;&#x4F18;&#x5316;&#x4EA4;&#x4E92;&#x7684;&#x6570;&#x636E;-jons-&#x3001;byte&#x3001;&#x56FE;&#x7247;-&#x6587;&#x4EF6;"><a name="&#x538B;&#x7F29;&#x4F18;&#x5316;&#x4EA4;&#x4E92;&#x7684;&#x6570;&#x636E;-jons-&#x3001;byte&#x3001;&#x56FE;&#x7247;-&#x6587;&#x4EF6;" class="anchor-navigation-ex-anchor" href="#&#x538B;&#x7F29;&#x4F18;&#x5316;&#x4EA4;&#x4E92;&#x7684;&#x6570;&#x636E;-jons-&#x3001;byte&#x3001;&#x56FE;&#x7247;-&#x6587;&#x4EF6;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.6. &#x538B;&#x7F29;&#x4F18;&#x5316;&#x4EA4;&#x4E92;&#x7684;&#x6570;&#x636E; (jons &#x3001;byte&#x3001;&#x56FE;&#x7247; &#x6587;&#x4EF6;)</h3>
<pre><code class="lang-text">1&#x3001;&#x6D88;&#x9664;&#x4E0D;&#x5FC5;&#x8981;&#x7684;&#x6570;&#x636E;&#x4F20;&#x8F93;&#xFF0C;&#x51CF;&#x5C11;&#x4E0B;&#x8F7D;&#x4E0D;&#x5FC5;&#x8981;&#x7684;&#x8D44;&#x6E90;&#xFF0C;
&#x9009;&#x62E9;&#x5408;&#x9002;&#x7684;&#x4EA4;&#x4E92;&#x683C;&#x5F0F;&#x3001;&#x9009;&#x62E9;&#x5408;&#x9002;&#x683C;&#x5F0F;&#x7684;&#x56FE;&#x7247;&#x7B49;&#x3002;

2&#x3001;&#x901A;&#x8FC7;&#x538B;&#x7F29;&#x7B97;&#x6CD5;&#x628A;&#x8981;&#x53D1;&#x9001;&#x7684;&#x6BD4;&#x7279;&#x6570;&#x964D;&#x5230;&#x6700;&#x4F4E;&#xFF0C;
&#x53EF;&#x4EE5;&#x4F7F;&#x7528; gzip &#x5BF9;post &#x6570;&#x636E;&#x8FDB;&#x884C;&#x538B;&#x7F29;&#x3002;
</code></pre>
<h3 id="&#x6570;&#x636E;&#x7F13;&#x5B58;"><a name="&#x6570;&#x636E;&#x7F13;&#x5B58;" class="anchor-navigation-ex-anchor" href="#&#x6570;&#x636E;&#x7F13;&#x5B58;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.7. &#x6570;&#x636E;&#x7F13;&#x5B58;</h3>
<pre><code class="lang-text">&#x670D;&#x52A1;&#x7AEF;&#x8FD4;&#x56DE;&#x52A0;&#x4E0A;&#x8FC7;&#x671F;&#x65F6;&#x95F4;&#xFF0C;&#x907F;&#x514D;&#x6BCF;&#x6B21;&#x91CD;&#x65B0;&#x83B7;&#x53D6;&#x3002; 
&#x8282;&#x7EA6;&#x6D41;&#x91CF;&#x4E14;&#x5927;&#x5E45;&#x63D0;&#x9AD8;&#x6570;&#x636E;&#x8BBF;&#x95EE;&#x901F;&#x5EA6;&#xFF0C;&#x66F4;&#x597D;&#x7684;&#x7528;&#x6237;&#x4F53;&#x9A8C;&#x3002;
</code></pre>
<h3 id="&#x79FB;&#x52A8;&#x7F51;&#x7EDC;&#x91C7;&#x7528;-&#x7206;&#x53D1;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x5E76;&#x8F6C;&#x4E3A;&#x7A7A;&#x95F2;"><a name="&#x79FB;&#x52A8;&#x7F51;&#x7EDC;&#x91C7;&#x7528;-&#x7206;&#x53D1;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x5E76;&#x8F6C;&#x4E3A;&#x7A7A;&#x95F2;" class="anchor-navigation-ex-anchor" href="#&#x79FB;&#x52A8;&#x7F51;&#x7EDC;&#x91C7;&#x7528;-&#x7206;&#x53D1;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x5E76;&#x8F6C;&#x4E3A;&#x7A7A;&#x95F2;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.8. &#x79FB;&#x52A8;&#x7F51;&#x7EDC;&#x91C7;&#x7528; &#x201C;&#x7206;&#x53D1;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x5E76;&#x8F6C;&#x4E3A;&#x7A7A;&#x95F2;&#x201D;</h3>
<pre><code class="lang-text">&#x56E0;&#x4E3A;&#x79FB;&#x52A8;&#x65E0;&#x7EBF;&#x63A5;&#x53E3;&#x4E13;&#x95E8;&#x4E3A;&#x7206;&#x53D1;&#x6027;&#x4F20;&#x8F93;&#x505A;&#x8FC7;&#x4F18;&#x5316;&#xFF0C;
&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x5E94;&#x8BE5;&#x8981;&#x5C3D;&#x53EF;&#x80FD;&#x591A;&#x3001;&#x5FEB;&#x5730;&#x4E0B;&#x8F7D;&#x6570;&#x636E;&#xFF0C;
&#x7136;&#x540E;&#x8BA9;&#x65E0;&#x7EBF;&#x6A21;&#x5757;&#x8F6C;&#x4E3A;&#x7A7A;&#x95F2;&#x3002;
&#x8FD9;&#x6837;&#x65E2;&#x53EF;&#x4EE5;&#x83B7;&#x5F97;&#x6700;&#x5927;&#x7684;&#x7F51;&#x7EDC;&#x541E;&#x5410;&#x91CF;&#xFF0C;&#x4E5F;&#x80FD;&#x8282;&#x7EA6;&#x7535;&#x91CF;&#x3002;

&#x4F8B;&#x5982;&#x5982;&#x679C;&#x9700;&#x8981;&#x5927;&#x578B;&#x97F3;&#x9891;&#x6216;&#x89C6;&#x9891;&#x6587;&#x4EF6;&#xFF0C;
&#x4F18;&#x5148;&#x8003;&#x8651;&#x4E0B;&#x8F7D;&#x6574;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x800C;&#x4E0D;&#x8981;&#x4EE5;&#x6BD4;&#x7279;&#x4E3A;&#x5355;&#x4F4D;&#x5730;&#x6D41;&#x5F0F;&#x4E0B;&#x8F7D;&#x3002;
</code></pre>
<h3 id="&#x5927;&#x6570;&#x91CF;&#x91CF;&#x4F18;&#x5148;&#x8003;&#x8651;&#x653E;-wifi-&#x573A;&#x666F;&#x4E0B;&#x8F7D;"><a name="&#x5927;&#x6570;&#x91CF;&#x91CF;&#x4F18;&#x5148;&#x8003;&#x8651;&#x653E;-wifi-&#x573A;&#x666F;&#x4E0B;&#x8F7D;" class="anchor-navigation-ex-anchor" href="#&#x5927;&#x6570;&#x91CF;&#x91CF;&#x4F18;&#x5148;&#x8003;&#x8651;&#x653E;-wifi-&#x573A;&#x666F;&#x4E0B;&#x8F7D;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.9. &#x5927;&#x6570;&#x91CF;&#x91CF;&#x4F18;&#x5148;&#x8003;&#x8651;&#x653E; WiFi &#x573A;&#x666F;&#x4E0B;&#x8F7D;</h3>
<pre><code class="lang-text">Wi-Fi &#x8FDE;&#x63A5;&#x4E0B;&#x7684;&#x5927;&#x6570;&#x636E;&#x91CF;&#x4F20;&#x8F93;&#x66F4;&#x7701;&#x7535;&#xFF0C;
&#x800C;&#x4E14;&#x5728;&#x901A;&#x4FE1;&#x8FC7;&#x7A0B;&#x4E2D;&#x4E5F;&#x4E0D;&#x9700;&#x8981; RRC&#xFF0C;
&#x76F8;&#x5BF9;&#x4E8E; 4G &#x7F51;&#x7EDC;&#xFF0C;&#x6240;&#x4EE5;&#x901F;&#x5EA6;&#x4E5F;&#x4F1A;&#x66F4;&#x5FEB;&#x3002;

RRC (Radio Resource Control) ,&#x65E0;&#x7EBF;&#x8D44;&#x6E90;&#x63A7;&#x5236;&#x5C42;
</code></pre>
<h3 id="&#x8C28;&#x614E;&#x4F7F;&#x7528;-base64-&#x7F16;&#x7801;"><a name="&#x8C28;&#x614E;&#x4F7F;&#x7528;-base64-&#x7F16;&#x7801;" class="anchor-navigation-ex-anchor" href="#&#x8C28;&#x614E;&#x4F7F;&#x7528;-base64-&#x7F16;&#x7801;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.10. &#x8C28;&#x614E;&#x4F7F;&#x7528; base64 &#x7F16;&#x7801;</h3>
<pre><code class="lang-text">Base64&#x7F16;&#x7801;&#x4F1A;&#x4F7F;&#x6570;&#x636E;&#x91CF;&#x53D8;&#x5927;&#x3002;
&#x4ECE; base64 &#x7F16;&#x7801;&#x89C4;&#x5219;&#x5F97;&#x77E5;&#xFF0C;&#x901A;&#x8FC7;Base64&#x7F16;&#x7801;&#xFF0C;
&#x5373;&#x5B57;&#x8282;&#x589E;&#x52A0;&#x4E86;33.3%&#xFF0C;&#x6570;&#x636E;&#x91CF;&#x76F8;&#x5E94;&#x53D8;&#x5927;&#x3002;
https://base64.us
</code></pre>
<h3 id="&#x6D41;&#x91CF;&#x7EDF;&#x8BA1;&#x3001;&#x6D41;&#x91CF;&#x515C;&#x5E95;&#x80FD;&#x529B;"><a name="&#x6D41;&#x91CF;&#x7EDF;&#x8BA1;&#x3001;&#x6D41;&#x91CF;&#x515C;&#x5E95;&#x80FD;&#x529B;" class="anchor-navigation-ex-anchor" href="#&#x6D41;&#x91CF;&#x7EDF;&#x8BA1;&#x3001;&#x6D41;&#x91CF;&#x515C;&#x5E95;&#x80FD;&#x529B;"><i class="fa fa-link" aria-hidden="true"></i></a>8.5.11. &#x6D41;&#x91CF;&#x7EDF;&#x8BA1;&#x3001;&#x6D41;&#x91CF;&#x515C;&#x5E95;&#x80FD;&#x529B;</h3>
<pre><code class="lang-text">&#x5982;&#x679C;&#x53D1;&#x73B0;&#x6D41;&#x91CF;&#x5F02;&#x5E38;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x540E;&#x53F0;&#x670D;&#x52A1;&#x5668;&#x7EC8;&#x6B62;&#x534F;&#x8BAE;&#x4EA4;&#x4E92;&#xFF0C;&#x4EE5;&#x907F;&#x514D;&#x95EE;&#x9898;&#x6076;&#x5316;&#x3002;
</code></pre>
<h1 id="&#x5185;&#x5B58;&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><a name="&#x5185;&#x5B58;&#x4F18;&#x5316;-&#x5B8C;&#x6210;" class="anchor-navigation-ex-anchor" href="#&#x5185;&#x5B58;&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><i class="fa fa-link" aria-hidden="true"></i></a>9. &#x5185;&#x5B58;&#x4F18;&#x5316; (&#x5B8C;&#x6210;)</h1>
<pre><code class="lang-text">1&#x3001;&#x522B;&#x9891;&#x7E41;GC
2&#x3001;&#x63A7;&#x5236;&#x597D;&#x5BF9;&#x8C61;&#x7684;&#x5F15;&#x7528;&#xFF0C;&#x9632;&#x6B62;&#x5BF9;&#x8C61;&#x4E00;&#x76F4;&#x65E0;&#x6CD5;&#x91CA;&#x653E;&#x3002;

&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C;&#x51FA;&#x73B0;OOM&#x662F;&#x56E0;&#x4E3A;&#x5185;&#x5B58;&#x6EA2;&#x51FA;&#x5BFC;&#x81F4;&#xFF0C;
&#x4F46;&#x662F;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0D;&#x4E00;&#x5B9A;&#x4F1A;&#x53D1;&#x751F;&#x5728;&#x76F8;&#x5BF9;&#x5E94;&#x7684;&#x4EE3;&#x7801;&#x5904;&#xFF0C;
&#x4E5F;&#x4E0D;&#x4E00;&#x5B9A;&#x662F;&#x51FA;&#x73B0;OOM&#x7684;&#x4EE3;&#x7801;&#x4F7F;&#x7528;&#x5185;&#x5B58;&#x6709;&#x95EE;&#x9898;&#xFF0C;&#x800C;&#x662F;&#x521A;&#x597D;&#x6267;&#x884C;&#x5230;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x3002;

&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x5C31;&#x662F;&#x5728;&#x5F53;&#x524D;&#x5E94;&#x7528;&#x5468;&#x671F;&#x5185;&#x4E0D;&#x518D;&#x4F7F;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x88AB; GC Roots &#x5F15;&#x7528;&#xFF0C;
&#x5BFC;&#x81F4;&#x4E0D;&#x80FD;&#x56DE;&#x6536;&#xFF0C;&#x4F7F;&#x5B9E;&#x9645;&#x53EF;&#x4F7F;&#x7528;&#x5185;&#x5B58;&#x53D8;&#x5C0F;&#x3002;
</code></pre>
<h2 id="&#x5185;&#x5B58;&#x4F18;&#x5316;&#x7684;&#x4F5C;&#x7528;"><a name="&#x5185;&#x5B58;&#x4F18;&#x5316;&#x7684;&#x4F5C;&#x7528;" class="anchor-navigation-ex-anchor" href="#&#x5185;&#x5B58;&#x4F18;&#x5316;&#x7684;&#x4F5C;&#x7528;"><i class="fa fa-link" aria-hidden="true"></i></a>9.1. &#x5185;&#x5B58;&#x4F18;&#x5316;&#x7684;&#x4F5C;&#x7528;</h2>
<pre><code class="lang-text">1&#x3001;&#x51CF;&#x5C11;OOM&#xFF0C;&#x63D0;&#x9AD8;&#x5E94;&#x7528;&#x7A33;&#x5B9A;&#x6027;&#x3002;
2&#x3001;&#x51CF;&#x5C11;&#x5361;&#x987F;&#xFF0C;&#x63D0;&#x9AD8;&#x5E94;&#x7528;&#x6D41;&#x7545;&#x5EA6;&#x3002;
3&#x3001;&#x51CF;&#x5C11;&#x5185;&#x5B58;&#x5360;&#x7528;&#xFF0C;&#x63D0;&#x9AD8;&#x5E94;&#x7528;&#x540E;&#x53F0;&#x8FD0;&#x884C;&#x65F6;&#x7684;&#x5B58;&#x6D3B;&#x7387;&#x3002;
</code></pre>
<h2 id="&#x5E38;&#x89C1;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x573A;&#x666F;"><a name="&#x5E38;&#x89C1;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x573A;&#x666F;" class="anchor-navigation-ex-anchor" href="#&#x5E38;&#x89C1;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x573A;&#x666F;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2. &#x5E38;&#x89C1;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x573A;&#x666F;</h2>
<h3 id="&#x8D44;&#x6E90;&#x6027;&#x5BF9;&#x8C61;&#x672A;&#x5173;&#x95ED;"><a name="&#x8D44;&#x6E90;&#x6027;&#x5BF9;&#x8C61;&#x672A;&#x5173;&#x95ED;" class="anchor-navigation-ex-anchor" href="#&#x8D44;&#x6E90;&#x6027;&#x5BF9;&#x8C61;&#x672A;&#x5173;&#x95ED;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2.1. &#x8D44;&#x6E90;&#x6027;&#x5BF9;&#x8C61;&#x672A;&#x5173;&#x95ED;</h3>
<pre><code class="lang-text">&#x5BF9;&#x4E8E;&#x8D44;&#x6E90;&#x6027;&#x5BF9;&#x8C61;&#x4E0D;&#x518D;&#x4F7F;&#x7528;&#x65F6;&#xFF0C;&#x5E94;&#x8BE5;&#x7ACB;&#x5373;&#x8C03;&#x7528;&#x5B83;&#x7684;close()&#x51FD;&#x6570;&#xFF0C;&#x5C06;&#x5176;&#x5173;&#x95ED;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x7F6E;&#x4E3A;null&#x3002;
&#x4F8B;&#x5982;Bitmap&#x7B49;&#x8D44;&#x6E90;&#x672A;&#x5173;&#x95ED;&#x4F1A;&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#xFF0C;&#x6B64;&#x65F6;&#x6211;&#x4EEC;&#x5E94;&#x8BE5;&#x5728; Activity &#x9500;&#x6BC1;&#x65F6;&#x53CA;&#x65F6;&#x5173;&#x95ED;&#x3002;
</code></pre>
<h3 id="&#x6CE8;&#x518C;&#x5BF9;&#x8C61;&#x672A;&#x6CE8;&#x9500;"><a name="&#x6CE8;&#x518C;&#x5BF9;&#x8C61;&#x672A;&#x6CE8;&#x9500;" class="anchor-navigation-ex-anchor" href="#&#x6CE8;&#x518C;&#x5BF9;&#x8C61;&#x672A;&#x6CE8;&#x9500;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2.2. &#x6CE8;&#x518C;&#x5BF9;&#x8C61;&#x672A;&#x6CE8;&#x9500;</h3>
<pre><code class="lang-text">&#x4F8B;&#x5982; BraodcastReceiver &#x3001;EventBus &#x672A;&#x6CE8;&#x9500;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#xFF0C;
&#x6211;&#x4EEC;&#x5E94;&#x8BE5;&#x5728;Activity&#x9500;&#x6BC1;&#x65F6;&#x53CA;&#x65F6;&#x6CE8;&#x9500;&#x3002;
</code></pre>
<h3 id="&#x7C7B;&#x7684;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x6301;&#x6709;&#x5927;&#x6570;&#x636E;&#x5BF9;&#x8C61;"><a name="&#x7C7B;&#x7684;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x6301;&#x6709;&#x5927;&#x6570;&#x636E;&#x5BF9;&#x8C61;" class="anchor-navigation-ex-anchor" href="#&#x7C7B;&#x7684;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x6301;&#x6709;&#x5927;&#x6570;&#x636E;&#x5BF9;&#x8C61;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2.3. &#x7C7B;&#x7684;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x6301;&#x6709;&#x5927;&#x6570;&#x636E;&#x5BF9;&#x8C61;</h3>
<pre><code class="lang-text">&#x5C3D;&#x91CF;&#x907F;&#x514D;&#x4F7F;&#x7528;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x5B58;&#x50A8;&#x6570;&#x636E;&#xFF0C;&#x7279;&#x522B;&#x662F;&#x5927;&#x6570;&#x636E;&#x5BF9;&#x8C61;&#xFF0C;&#x5EFA;&#x8BAE;&#x4F7F;&#x7528;&#x6570;&#x636E;&#x5E93;&#x5B58;&#x50A8;&#x3002;
</code></pre>
<h3 id="&#x5355;&#x4F8B;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><a name="&#x5355;&#x4F8B;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;" class="anchor-navigation-ex-anchor" href="#&#x5355;&#x4F8B;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2.4. &#x5355;&#x4F8B;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;</h3>
<pre><code class="lang-text">&#x4F18;&#x5148;&#x4F7F;&#x7528;Application&#x7684;Context&#xFF0C;
&#x5982;&#x9700;&#x4F7F;&#x7528;Activity&#x7684;Context&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x4F20;&#x5165;Context&#x65F6;&#x4F7F;&#x7528;&#x5F31;&#x5F15;&#x7528;&#x8FDB;&#x884C;&#x5C01;&#x88C5; &#x3002;
</code></pre>
<h3 id="handler-&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><a name="handler-&#x5185;&#x5B58;&#x6CC4;&#x6F0F;" class="anchor-navigation-ex-anchor" href="#handler-&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2.5. Handler &#x5185;&#x5B58;&#x6CC4;&#x6F0F;</h3>
<p>&#x8BF7;&#x67E5;&#x770B; Handle &#x8BE6;&#x89E3; &#x8FD9;&#x4E00;&#x5757;&#x3002;</p>
<h3 id="asynctask-&#x5185;&#x5B58;&#x6CC4;&#x9732;"><a name="asynctask-&#x5185;&#x5B58;&#x6CC4;&#x9732;" class="anchor-navigation-ex-anchor" href="#asynctask-&#x5185;&#x5B58;&#x6CC4;&#x9732;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2.6. AsyncTask &#x5185;&#x5B58;&#x6CC4;&#x9732;</h3>
<pre><code class="lang-text">AsyncTask &#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x7684;&#x539F;&#x56E0;&#x8DDF; Handle &#x539F;&#x56E0;&#x7C7B;&#x4F3C;&#x3002;
&#x7531;&#x4E8E; &#x6301;&#x6709;&#x5916;&#x90E8;&#x7C7B; activity &#x7684;&#x5F3A;&#x5F15;&#x7528; &#xFF0C;
&#x5982;&#x679C; activity &#x9000;&#x51FA;&#x65F6;&#xFF0C; AsyncTask &#x8FD8;&#x5728;&#x6267;&#x884C;&#x64CD;&#x4F5C;&#xFF0C;&#x5BFC;&#x81F4; activity &#x65E0;&#x6CD5;&#x91CA;&#x653E;&#x3002;
&#x89E3;&#x51B3;&#x529E;&#x6CD5;&#x6709;2&#x4E2A;&#xFF1A;
1&#x3001;&#x5728;&#x9000;&#x51FA;&#x662F; &#x624B;&#x52A8;&#x8C03;&#x7528;  asyncTask.execute() 
2&#x3001;static + WeakReference 
private static class MyTask extends AsyncTask&lt;Bundle, Integer, Bundle&gt; {
    private final WeakReference&lt;MainActivity&gt; weakReference;
    private MyTask(MainActivity activity) {
        weakReference = new WeakReference&lt;&gt;(activity);
    }
    @Override
    protected Bundle doInBackground(Bundle... bundles) {
        return bundle; // &#x8017;&#x65F6;&#x64CD;&#x4F5C;
    }
    @Override
    protected void onPostExecute(Bundle bundle) {
        if (weakReference.get() == null){
            return;
        }
        weakReference.get().handleResult(bundle);
    }
}
</code></pre>
<h3 id="&#x5BB9;&#x5668;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x6CA1;&#x6E05;&#x7406;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><a name="&#x5BB9;&#x5668;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x6CA1;&#x6E05;&#x7406;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;" class="anchor-navigation-ex-anchor" href="#&#x5BB9;&#x5668;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x6CA1;&#x6E05;&#x7406;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2.7. &#x5BB9;&#x5668;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x6CA1;&#x6E05;&#x7406;&#x9020;&#x6210;&#x7684;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;</h3>
<pre><code class="lang-text">&#x53CA;&#x65F6;&#x5C06;&#x96C6;&#x5408;&#x91CC;&#x7684;&#x4E1C;&#x897F;clear&#xFF0C;&#x7136;&#x540E;&#x7F6E;&#x4E3A;null&#xFF0C;&#x518D;&#x9000;&#x51FA;&#x3002;
&#x5426;&#x5219;&#x4F1A;&#x9020;&#x6210;&#x96C6;&#x5408;&#x8D8A;&#x6765;&#x8D8A;&#x5927;&#xFF0C;&#x4E07;&#x4E00;&#x9759;&#x6001;&#x96C6;&#x5408;&#x5FD8;&#x8BB0;&#x9000;&#x51FA;&#x548C;&#x6E05;&#x7A7A;&#x4E86;&#xFF0C;&#x4F1A;&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x3002;
</code></pre>
<h3 id="webview-bug-&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><a name="webview-bug-&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;" class="anchor-navigation-ex-anchor" href="#webview-bug-&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2.8. WebView Bug &#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;</h3>
<pre><code class="lang-text">WebView &#x56E0;&#x4E3A;bug &#xFF0C;&#x90FD;&#x5B58;&#x5728;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x7684;&#x95EE;&#x9898;&#x3002;
&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4E3A; WebView&#x5F00;&#x542F;&#x4E00;&#x4E2A;&#x72EC;&#x7ACB;&#x7684;&#x8FDB;&#x7A0B;&#xFF0C;&#x4F7F;&#x7528;AIDL&#x4E0E;&#x5E94;&#x7528;&#x7684;&#x4E3B;&#x8FDB;&#x7A0B;&#x8FDB;&#x884C;&#x901A;&#x4FE1;&#xFF0C;
WebView&#x6240;&#x5728;&#x7684;&#x8FDB;&#x7A0B;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x4E1A;&#x52A1;&#x7684;&#x9700;&#x8981;&#x9009;&#x62E9;&#x5408;&#x9002;&#x7684;&#x65F6;&#x673A;&#x8FDB;&#x884C;&#x9500;&#x6BC1;&#xFF0C;
&#x8FBE;&#x5230;&#x6B63;&#x5E38;&#x91CA;&#x653E;&#x5185;&#x5B58;&#x7684;&#x76EE;&#x7684;&#x3002;
</code></pre>
<h3 id="listview-&#x4F7F;&#x7528;&#x4E0D;&#x5F53;&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><a name="listview-&#x4F7F;&#x7528;&#x4E0D;&#x5F53;&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;" class="anchor-navigation-ex-anchor" href="#listview-&#x4F7F;&#x7528;&#x4E0D;&#x5F53;&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;"><i class="fa fa-link" aria-hidden="true"></i></a>9.2.9. ListView &#x4F7F;&#x7528;&#x4E0D;&#x5F53;&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;</h3>
<pre><code class="lang-text">&#x5982;&#x679C;&#x4E0D;&#x4F7F;&#x7528;&#x7F13;&#x5B58; convertView &#x7684;&#x8BDD;&#xFF0C;&#x8C03;&#x7528;getView&#x65F6;&#x6BCF;&#x6B21;&#x90FD;&#x4F1A;&#x91CD;&#x65B0;&#x521B;&#x5EFA;View&#xFF0C;
&#x8FD9;&#x6837;&#x4E4B;&#x524D;&#x7684;View&#x53EF;&#x80FD;&#x8FD8;&#x6CA1;&#x6709;&#x9500;&#x6BC1;&#xFF0C;
&#x52A0;&#x4E4B;&#x4E0D;&#x65AD;&#x7684;&#x65B0;&#x5EFA;View&#x52BF;&#x5FC5;&#x4F1A;&#x9020;&#x6210;&#x5185;&#x5B58;&#x6CC4;&#x9732;&#x3002;
</code></pre>
<h2 id="application-&#x4F4E;&#x5185;&#x5B58;&#x56DE;&#x8C03;"><a name="application-&#x4F4E;&#x5185;&#x5B58;&#x56DE;&#x8C03;" class="anchor-navigation-ex-anchor" href="#application-&#x4F4E;&#x5185;&#x5B58;&#x56DE;&#x8C03;"><i class="fa fa-link" aria-hidden="true"></i></a>9.3. Application &#x4F4E;&#x5185;&#x5B58;&#x56DE;&#x8C03;</h2>
<pre><code class="lang-text">// Android 4.0&#x524D; &#x68C0;&#x6D4B;&#x5185;&#x5B58;&#x4F7F;&#x7528;&#x60C5;&#x51B5;, 4.0 &#x4EE5;&#x540E;&#x5EFA;&#x8BAE;&#x4F7F;&#x7528; onTrimMemory
@Override
public void onLowMemory() {
    super.onLowMemory();
}

// 4.0 &#x65B0;&#x589E;&#x7684; API ,level &#x503C;&#x8868;&#x793A;&#x5F53;&#x524D;&#x5185;&#x5B58;&#x72B6;&#x6001;&#xFF0C;
// &#x53EF;&#x4EE5;&#x6839;&#x636E;&#x8FD4;&#x56DE;&#x7684;&#x72B6;&#x6001;&#x6765;&#x9002;&#x5F53;&#x56DE;&#x6536;&#x8D44;&#x6E90;&#x907F;&#x514D; app &#x88AB;&#x6740;&#x6B7B;&#x7684;&#x98CE;&#x9669;&#x3002;
@Override
public void onTrimMemory(int level) {
    switch (level){
           // &#x4F60;&#x7684;&#x5E94;&#x7528;&#x5728;&#x8FD0;&#x884C;&#x4E14;&#x4E0D;&#x4F1A;&#x88AB;&#x6740;&#x6389;&#xFF0C;&#x4F46;&#x8BBE;&#x5907;&#x53EF;&#x7528;&#x5185;&#x5B58;&#x4F4E;&#xFF0C;&#x7CFB;&#x7EDF;&#x6B63;&#x5728;&#x6267;&#x884C;&#x6740;&#x6389;LRU&#x7F13;&#x5B58;&#x91CC;&#x7684;&#x8FDB;&#x7A0B;
        case TRIM_MEMORY_RUNNING_MODERATE:
           // &#x4F60;&#x7684;&#x5E94;&#x7528;&#x5728;&#x8FD0;&#x884C;&#x4E14;&#x4E0D;&#x4F1A;&#x88AB;&#x6740;&#x6389;&#xFF0C;&#x4F46;&#x8BBE;&#x5907;&#x53EF;&#x7528;&#x5185;&#x5B58;&#x8FC7;&#x4F4E;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x91CA;&#x653E;&#x4E0D;&#x518D;&#x4F7F;&#x7528;&#x7684;&#x8D44;&#x6E90;&#x6765;&#x6539;&#x5584;&#x6027;&#x80FD;
        case TRIM_MEMORY_RUNNING_LOW:
            // &#x4F60;&#x7684;&#x5E94;&#x7528;&#x5728;&#x8FD0;&#x884C;&#xFF0C;&#x4F46;&#x7CFB;&#x7EDF;&#x5DF2;&#x7ECF;&#x6740;&#x6B7B;&#x4E86;&#x5176;&#x4ED6;LRU&#x7F13;&#x5B58;&#x91CC;&#x7684;&#x5927;&#x90E8;&#x5206;&#x8FDB;&#x7A0B;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x7ACB;&#x523B;&#x91CA;&#x653E;&#x6240;&#x6709;&#x4E0D;&#x91CD;&#x8981;&#x7684;&#x8D44;&#x6E90;&#x3002;
        case TRIM_MEMORY_RUNNING_CRITICAL:
            // &#x4F60;&#x7684;&#x8FDB;&#x7A0B;&#x5F53;&#x524D;&#x662F;&#x540E;&#x53F0;&#x88AB;&#x7F13;&#x5B58;&#x7684;&#xFF0C;&#x7CFB;&#x7EDF;&#x8FD0;&#x884C;&#x5728;&#x4F4E;&#x5185;&#x5B58;&#xFF0C;&#x4F60;&#x7684;&#x5E94;&#x7528;&#x4E34;&#x8FD1;LRU&#x7F13;&#x5B58;List&#x7684;&#x5F00;&#x59CB;&#x4F4D;&#x7F6E;&#x3002;
        case TRIM_MEMORY_BACKGROUND:
            // &#x4F60;&#x7684;&#x8FDB;&#x7A0B;&#x5F53;&#x524D;&#x662F;&#x540E;&#x53F0;&#x88AB;&#x7F13;&#x5B58;&#x7684;&#xFF0C;&#x7CFB;&#x7EDF;&#x8FD0;&#x884C;&#x5728;&#x4F4E;&#x5185;&#x5B58;&#xFF0C;&#x4F60;&#x7684;&#x5E94;&#x7528;&#x4E34;&#x8FD1;LRU&#x7F13;&#x5B58;&#x7684;&#x4E2D;&#x95F4;&#x4F4D;&#x7F6E;&#xFF0C;&#x5982;&#x679C;&#x7CFB;&#x7EDF;&#x53EF;&#x7528;&#x5185;&#x5B58;&#x53D8;&#x5F97;&#x66F4;&#x7CDF;&#x7CD5;&#x4F60;&#x7684;&#x5E94;&#x7528;&#x5F88;&#x53EF;&#x80FD;&#x88AB;&#x6740;&#x6389;
        case TRIM_MEMORY_MODERATE:
            // &#x4F60;&#x7684;&#x8FDB;&#x7A0B;&#x5F53;&#x524D;&#x662F;&#x540E;&#x53F0;&#x88AB;&#x7F13;&#x5B58;&#x7684;&#xFF0C;&#x7CFB;&#x7EDF;&#x8FD0;&#x884C;&#x5728;&#x4F4E;&#x5185;&#x5B58;&#xFF0C;&#x5982;&#x679C;&#x7CFB;&#x7EDF;&#x53EF;&#x7528;&#x5185;&#x5B58;&#x65E0;&#x6CD5;&#x6062;&#x590D;&#xFF0C;&#x4F60;&#x7684;&#x5E94;&#x7528;&#x662F;&#x9700;&#x8981;&#x88AB;&#x9996;&#x5148;&#x6740;&#x6B7B;&#x7684;&#x8FDB;&#x7A0B;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x3002;
        // &#x7B49;&#x4EF7;&#x4E8E;onLowMemory()
        case TRIM_MEMORY_COMPLETE:
            // &#x4F60;&#x7684;&#x5E94;&#x7528;&#x754C;&#x9762;&#x88AB;&#x9690;&#x85CF;&#x5E76;&#x4E14;&#x4F60;&#x5E94;&#x8BE5;&#x91CA;&#x653E;&#x754C;&#x9762;&#x76F8;&#x5173;&#x7684;&#x8D44;&#x6E90;&#x3002;
        case TRIM_MEMORY_UI_HIDDEN:
            break;
    }
    super.onTrimMemory(level);
}
</code></pre>
<h2 id="&#x5185;&#x5B58;&#x4F18;&#x5316;&#x65B9;&#x6848;"><a name="&#x5185;&#x5B58;&#x4F18;&#x5316;&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#&#x5185;&#x5B58;&#x4F18;&#x5316;&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>9.4. &#x5185;&#x5B58;&#x4F18;&#x5316;&#x65B9;&#x6848;</h2>
<h3 id="&#x51CF;&#x5C11;&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x548C;&#x62C6;&#x7BB1;-&#xFF0C;autoboxing-and-unboxing"><a name="&#x51CF;&#x5C11;&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x548C;&#x62C6;&#x7BB1;-&#xFF0C;autoboxing-and-unboxing" class="anchor-navigation-ex-anchor" href="#&#x51CF;&#x5C11;&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x548C;&#x62C6;&#x7BB1;-&#xFF0C;autoboxing-and-unboxing"><i class="fa fa-link" aria-hidden="true"></i></a>9.4.1. &#x51CF;&#x5C11;&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x548C;&#x62C6;&#x7BB1; &#xFF0C;Autoboxing and unboxing</h3>
<pre><code class="lang-text">Integer total = 99;//&#x81EA;&#x52A8;&#x88C5;&#x7BB1;
int totalprim = total; //&#x81EA;&#x52A8;&#x62C6;&#x7BB1;
&#x5728;&#x81EA;&#x52A8;&#x88C5;&#x7BB1;&#x8F6C;&#x5316;&#x65F6;&#xFF0C;&#x90FD;&#x4F1A;&#x4EA7;&#x751F;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x4F1A;&#x4EA7;&#x751F;&#x66F4;&#x591A;&#x7684;&#x5185;&#x5B58;&#x548C;&#x6027;&#x80FD;&#x5F00;&#x9500;&#x3002;
</code></pre>
<h3 id="&#x5185;&#x5B58;&#x590D;&#x7528;"><a name="&#x5185;&#x5B58;&#x590D;&#x7528;" class="anchor-navigation-ex-anchor" href="#&#x5185;&#x5B58;&#x590D;&#x7528;"><i class="fa fa-link" aria-hidden="true"></i></a>9.4.2. &#x5185;&#x5B58;&#x590D;&#x7528;</h3>
<pre><code class="lang-text">1&#x3001;&#x8D44;&#x6E90;&#x590D;&#x7528;&#xFF1A;&#x901A;&#x7528;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x3001;&#x989C;&#x8272;&#x5B9A;&#x4E49;&#x3001;&#x7B80;&#x5355;&#x9875;&#x9762;&#x5E03;&#x5C40;&#x7684;&#x590D;&#x7528;&#x3002;
2&#x3001;&#x89C6;&#x56FE;&#x590D;&#x7528;&#xFF1A;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;ViewHolder&#x5B9E;&#x73B0;ConvertView&#x590D;&#x7528;&#x3002;
3&#x3001;&#x5BF9;&#x8C61;&#x6C60;&#xFF1A;&#x663E;&#x793A;&#x521B;&#x5EFA;&#x5BF9;&#x8C61;&#x6C60;&#xFF0C;&#x5B9E;&#x73B0;&#x590D;&#x7528;&#x903B;&#x8F91;&#xFF0C;&#x5BF9;&#x76F8;&#x540C;&#x7684;&#x7C7B;&#x578B;&#x6570;&#x636E;&#x4F7F;&#x7528;&#x540C;&#x4E00;&#x5757;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x3002;
4&#x3001;Bitmap&#x5BF9;&#x8C61;&#x7684;&#x590D;&#x7528;&#xFF1A; &#x4F7F;&#x7528; inBitmap &#x9009;&#x9879;
</code></pre>
<h3 id="&#x4F7F;&#x7528;&#x6700;&#x4F18;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;"><a name="&#x4F7F;&#x7528;&#x6700;&#x4F18;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;" class="anchor-navigation-ex-anchor" href="#&#x4F7F;&#x7528;&#x6700;&#x4F18;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;"><i class="fa fa-link" aria-hidden="true"></i></a>9.4.3. &#x4F7F;&#x7528;&#x6700;&#x4F18;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;</h3>
<pre><code class="lang-text">1&#x3001; ArrayMap &#x6BD4; HashMap &#x66F4;&#x7701;&#x5185;&#x5B58;&#x3002;  

2&#x3001;&#x4F7F;&#x7528; IntDef &#x548C; @IntDef @StringDe &#x66FF;&#x4EE3;&#x679A;&#x4E3E;&#x7C7B;&#x578B;
&#x679A;&#x4E3E;&#x6700;&#x5927;&#x7684;&#x4F18;&#x70B9;&#x662F;&#x7C7B;&#x578B;&#x5B89;&#x5168; &#xFF0C;&#x4F46;&#x662F;&#x5F88;&#x6D88;&#x8017;&#x5185;&#x5B58;&#x3002;
</code></pre>
<h3 id="&#x4F7F;&#x7528;&#x5408;&#x7406;&#x7684;&#x7F13;&#x5B58;&#x7B56;&#x7565;-lrucache-least-recently-used"><a name="&#x4F7F;&#x7528;&#x5408;&#x7406;&#x7684;&#x7F13;&#x5B58;&#x7B56;&#x7565;-lrucache-least-recently-used" class="anchor-navigation-ex-anchor" href="#&#x4F7F;&#x7528;&#x5408;&#x7406;&#x7684;&#x7F13;&#x5B58;&#x7B56;&#x7565;-lrucache-least-recently-used"><i class="fa fa-link" aria-hidden="true"></i></a>9.4.4. &#x4F7F;&#x7528;&#x5408;&#x7406;&#x7684;&#x7F13;&#x5B58;&#x7B56;&#x7565; LruCache (Least Recently Used)</h3>
<pre><code class="lang-text">&#x5B83;&#x5185;&#x90E8;&#x7EF4;&#x62A4;&#x4E86;&#x4E00;&#x4E2A;&#x961F;&#x5217;&#xFF0C;&#x6BCF;&#x5F53;&#x4ECE;&#x4E2D;&#x53D6;&#x51FA;&#x4E00;&#x4E2A;&#x503C;&#x65F6;&#xFF0C;&#x8BE5;&#x503C;&#x5C31;&#x79FB;&#x52A8;&#x5230;&#x961F;&#x5217;&#x7684;&#x5934;&#x90E8;&#x3002;
&#x5F53;&#x7F13;&#x5B58;&#x5DF2;&#x6EE1;&#x800C;&#x7EE7;&#x7EED;&#x6DFB;&#x52A0;&#x65F6;&#xFF0C;&#x4F1A;&#x5C06;&#x961F;&#x5217;&#x5C3E;&#x90E8;&#x7684;&#x503C;&#x79FB;&#x9664;&#xFF0C;&#x65B9;&#x4FBF;GC&#x3002;
LruCache&#x7528;&#x4E8E;&#x5185;&#x5B58;&#x7F13;&#x5B58;&#xFF0C;&#x5728;&#x907F;&#x514D;&#x7A0B;&#x5E8F;&#x53D1;&#x751F;OOM&#x548C;&#x63D0;&#x9AD8;&#x6267;&#x884C;&#x6548;&#x7387;&#x6709;&#x7740;&#x826F;&#x597D;&#x8868;&#x73B0;&#x3002;
</code></pre>
<h3 id="&#x56FE;&#x7247;&#x5185;&#x5B58;&#x4F18;&#x5316;"><a name="&#x56FE;&#x7247;&#x5185;&#x5B58;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x56FE;&#x7247;&#x5185;&#x5B58;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>9.4.5. &#x56FE;&#x7247;&#x5185;&#x5B58;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x5177;&#x4F53;&#x8DF3;&#x8F6C;&#x5230; &#x201C;&#x56FE;&#x7247;&#x52A0;&#x8F7D;&#x8BE6;&#x89E3;&#x201D; &#x4E00;&#x7AE0;&#x67E5;&#x770B;&#x3002;
</code></pre>
<h3 id="&#x5217;&#x8868;-item-&#x88AB;&#x56DE;&#x6536;&#x4E0D;&#x53EF;&#x89C1;&#x65F6;&#x91CA;&#x653E;&#x6389;&#x5BF9;&#x56FE;&#x7247;&#x7684;&#x5F15;&#x7528;"><a name="&#x5217;&#x8868;-item-&#x88AB;&#x56DE;&#x6536;&#x4E0D;&#x53EF;&#x89C1;&#x65F6;&#x91CA;&#x653E;&#x6389;&#x5BF9;&#x56FE;&#x7247;&#x7684;&#x5F15;&#x7528;" class="anchor-navigation-ex-anchor" href="#&#x5217;&#x8868;-item-&#x88AB;&#x56DE;&#x6536;&#x4E0D;&#x53EF;&#x89C1;&#x65F6;&#x91CA;&#x653E;&#x6389;&#x5BF9;&#x56FE;&#x7247;&#x7684;&#x5F15;&#x7528;"><i class="fa fa-link" aria-hidden="true"></i></a>9.4.6. &#x5217;&#x8868; item &#x88AB;&#x56DE;&#x6536;&#x4E0D;&#x53EF;&#x89C1;&#x65F6;&#x91CA;&#x653E;&#x6389;&#x5BF9;&#x56FE;&#x7247;&#x7684;&#x5F15;&#x7528;</h3>
<pre><code class="lang-text">ListView&#xFF1A;&#x56E0;&#x6B64;&#x6BCF;&#x6B21;item&#x88AB;&#x56DE;&#x6536;&#x540E;&#x518D;&#x6B21;&#x5229;&#x7528;&#x90FD;&#x4F1A;&#x91CD;&#x65B0;&#x7ED1;&#x5B9A;&#x6570;&#x636E;&#xFF0C;
&#x53EA;&#x9700;&#x5728;ImageView onDetachFromWindow&#x7684;&#x65F6;&#x5019;&#x91CA;&#x653E;&#x6389;&#x56FE;&#x7247;&#x5F15;&#x7528;&#x5373;&#x53EF;&#x3002;

RecyclerView&#xFF1A;&#x56E0;&#x4E3A;&#x88AB;&#x56DE;&#x6536;&#x4E0D;&#x53EF;&#x89C1;&#x65F6;&#x7B2C;&#x4E00;&#x9009;&#x62E9;&#x662F;&#x653E;&#x8FDB;mCacheView&#x4E2D;&#xFF0C;
&#x8FD9;&#x91CC;item&#x88AB;&#x590D;&#x7528;&#x5E76;&#x4E0D;&#x4F1A;&#x53EA;&#x9700;bindViewHolder&#x6765;&#x91CD;&#x65B0;&#x7ED1;&#x5B9A;&#x6570;&#x636E;&#xFF0C;
&#x53EA;&#x6709;&#x88AB;&#x56DE;&#x6536;&#x8FDB;mRecyclePool&#x4E2D;&#x540E;&#x62FF;&#x51FA;&#x6765;&#x590D;&#x7528;&#x624D;&#x4F1A;&#x91CD;&#x65B0;&#x7ED1;&#x5B9A;&#x6570;&#x636E;&#xFF0C;
&#x56E0;&#x6B64;&#x91CD;&#x5199;Recycler.Adapter&#x4E2D;&#x7684;onViewRecycled()&#x65B9;&#x6CD5;
&#x6765;&#x4F7F;item&#x88AB;&#x56DE;&#x6536;&#x8FDB;RecyclePool&#x7684;&#x65F6;&#x5019;&#x53BB;&#x91CA;&#x653E;&#x56FE;&#x7247;&#x5F15;&#x7528;&#x3002;
</code></pre>
<h3 id="&#x7981;&#x7528;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x62FC;&#x63A5;"><a name="&#x7981;&#x7528;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x62FC;&#x63A5;" class="anchor-navigation-ex-anchor" href="#&#x7981;&#x7528;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x62FC;&#x63A5;"><i class="fa fa-link" aria-hidden="true"></i></a>9.4.7. &#x7981;&#x7528;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x62FC;&#x63A5;</h3>
<pre><code class="lang-text">&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5728;&#x5B57;&#x7B26;&#x4E32;&#x62FC;&#x63A5;&#x7684;&#x65F6;&#x5019;&#x4F7F;&#x7528;StringBuffer&#xFF0C;StringBuilder&#x3002;
&#x4EE3;&#x66FF; &#x5B57;&#x7B26;&#x4E32;&#x62FC;&#x63A5;&#x3002;
</code></pre>
<h3 id="&#x81EA;&#x5B9A;&#x4E49;view&#x4E2D;&#x7684;&#x5185;&#x5B58;&#x4F18;&#x5316;"><a name="&#x81EA;&#x5B9A;&#x4E49;view&#x4E2D;&#x7684;&#x5185;&#x5B58;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x81EA;&#x5B9A;&#x4E49;view&#x4E2D;&#x7684;&#x5185;&#x5B58;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>9.4.8. &#x81EA;&#x5B9A;&#x4E49;View&#x4E2D;&#x7684;&#x5185;&#x5B58;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x5728; onDraw &#x65B9;&#x6CD5;&#x7B49;&#x9891;&#x7E41;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x91CC;&#x9762;&#x4E0D;&#x8981;&#x6267;&#x884C;&#x5BF9;&#x8C61;&#x7684;&#x521B;&#x5EFA;&#xFF0C;
&#x4E00;&#x822C;&#x6765;&#x8BF4;&#xFF0C;&#x90FD;&#x5E94;&#x8BE5;&#x5728;&#x81EA;&#x5B9A;&#x4E49;View&#x7684;&#x6784;&#x9020;&#x5668;&#x4E2D;&#x521B;&#x5EFA;&#x5BF9;&#x8C61;&#x3002;
</code></pre>
<h3 id="final-&#x4F18;&#x5316;-&#x4E0D;&#x540C;&#x610F;"><a name="final-&#x4F18;&#x5316;-&#x4E0D;&#x540C;&#x610F;" class="anchor-navigation-ex-anchor" href="#final-&#x4F18;&#x5316;-&#x4E0D;&#x540C;&#x610F;"><i class="fa fa-link" aria-hidden="true"></i></a>9.4.9. final &#x4F18;&#x5316; (&#x4E0D;&#x540C;&#x610F;)</h3>
<pre><code class="lang-text">&#x6211;&#x770B;&#x5230;&#x6709;&#x535A;&#x5BA2;&#x8BF4;&#x662F; &#x7528; static final &#x4FEE;&#x9970;&#x5B57;&#x6BB5;&#x4F1A;&#x4F18;&#x5316;&#x5185;&#x5B58;&#x3002;
&#x4F46;&#x662F;&#x5728;&#x53C2;&#x8003;&#x4E86;&#x4E00;&#x4E9B;&#x5176;&#x4ED6;&#x8D44;&#x6599;&#x540E;&#xFF0C;&#x6CA1;&#x6709;&#x53D1;&#x73B0; final &#x8DDF;&#x5185;&#x5B58;&#x4F18;&#x5316;&#x6709;&#x5173;&#x3002;

&#x4F7F;&#x7528;final&#x65B9;&#x6CD5;&#x7684;&#x539F;&#x56E0;&#x6709;2&#x4E2A;&#xFF0C; 
1&#x3001;&#x9501;&#x5B9A;&#xFF0C;&#x7981;&#x6B62;&#x518D;&#x4FEE;&#x6539;
2&#x3001;&#x9AD8;&#x6548;&#x3002;&#x7F16;&#x8BD1;&#x5668;&#x5728;&#x9047;&#x5230;&#x8C03;&#x7528; final &#x65F6;&#x4F1A;&#x8F6C;&#x5165;&#x5185;&#x5D4C;&#x673A;&#x5236;&#xFF0C;&#x63D0;&#x9AD8;&#x6267;&#x884C;&#x6548;&#x7387;&#x3002; 

&#x8C03;&#x7528;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x9664;&#x4E86;&#x51FD;&#x6570;&#x672C;&#x8EAB;&#x7684;&#x6267;&#x884C;&#x65F6;&#x95F4;&#x4E4B;&#x5916;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x989D;&#x5916;&#x7684;&#x65F6;&#x95F4;&#x53BB;&#x5BFB;&#x627E;&#x8FD9;&#x4E2A;&#x51FD;&#x6570;&#x3002;
&#x6240;&#x4EE5;&#x51CF;&#x5C11;&#x51FD;&#x6570;&#x8C03;&#x7528;&#x6B21;&#x6570;&#x5C31;&#x7B49;&#x4E8E;&#x964D;&#x4F4E;&#x4E86;&#x6027;&#x80FD;&#x6D88;&#x8017;&#x3002;
&#x7F16;&#x8BD1;&#x5668;&#x76F4;&#x63A5;&#x5C06; final &#x51FD;&#x6570;&#x4F53;&#x5185;&#x5D4C;&#x5230;&#x4E86;&#x8C03;&#x7528;&#x51FD;&#x6570;&#x7684;&#x5730;&#x65B9;&#xFF0C;&#x8FD9;&#x6837;&#x7684;&#x7ED3;&#x679C;&#x662F;&#x8282;&#x7701;&#x4E86;&#x5BFB;&#x627E;&#x51FD;&#x6570;&#x7684;&#x65F6;&#x95F4;&#x3002;
</code></pre>
<h2 id="android-&#x67E5;&#x770B;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x56DE;&#x6536;&#x60C5;&#x51B5;"><a name="android-&#x67E5;&#x770B;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x56DE;&#x6536;&#x60C5;&#x51B5;" class="anchor-navigation-ex-anchor" href="#android-&#x67E5;&#x770B;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x56DE;&#x6536;&#x60C5;&#x51B5;"><i class="fa fa-link" aria-hidden="true"></i></a>9.5. Android &#x67E5;&#x770B;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x56DE;&#x6536;&#x60C5;&#x51B5;</h2>
<p>&#x4F7F;&#x7528; Android profiler &#x6765;&#x67E5;&#x770B;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x56DE;&#x6536;&#x60C5;&#x51B5; </p>
<pre><code class="lang-text">&#x5BF9;&#x8C61;&#x5185;&#x5B58;&#x56DE;&#x6536;&#x60C5;&#x51B5;

Shallow Size&#x662F;&#x5BF9;&#x8C61;&#x672C;&#x8EAB;&#x5360;&#x636E;&#x7684;&#x5185;&#x5B58;&#x7684;&#x5927;&#x5C0F;&#xFF0C;&#x4E0D;&#x5305;&#x542B;&#x5176;&#x5F15;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x3002;
&#x5BF9;&#x4E8E;&#x5E38;&#x89C4;&#x5BF9;&#x8C61;&#x7684; Shallow Size &#x7531;&#x5176;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x7684;&#x6570;&#x91CF;&#x548C;&#x7C7B;&#x578B;&#x6765;&#x5B9A;&#xFF0C;
&#x800C;&#x6570;&#x7EC4;&#x7684; ShallowSize &#x7531;&#x6570;&#x7EC4;&#x7C7B;&#x578B;&#x548C;&#x6570;&#x7EC4;&#x957F;&#x5EA6;&#x6765;&#x51B3;&#x5B9A;&#xFF0C;&#x5B83;&#x4E3A;&#x6570;&#x7EC4;&#x5143;&#x7D20;&#x5927;&#x5C0F;&#x7684;&#x603B;&#x548C;&#x3002; 

Retained size&#x662F;&#x8BE5;&#x5BF9;&#x8C61;&#x81EA;&#x5DF1;&#x7684;shallow size&#xFF0C;&#x52A0;&#x4E0A;&#x4ECE;&#x8BE5;&#x5BF9;&#x8C61;&#x80FD;&#x76F4;&#x63A5;&#x6216;&#x95F4;&#x63A5;&#x8BBF;&#x95EE;&#x5230;&#x5BF9;&#x8C61;&#x7684;shallow size&#x4E4B;&#x548C;&#x3002;
&#x6362;&#x53E5;&#x8BDD;&#x8BF4;&#xFF0C;retained size &#x662F;&#x8BE5;&#x5BF9;&#x8C61;&#x88AB;GC&#x4E4B;&#x540E;&#x6240;&#x80FD;&#x56DE;&#x6536;&#x5230;&#x5185;&#x5B58;&#x7684;&#x603B;&#x548C;&#x3002;
</code></pre>
<p><img src="../pics/&#x67E5;&#x770B;&#x5BF9;&#x8C61;&#x7684;&#x56DE;&#x6536;&#x60C5;&#x51B5;.png" alt=""></p>
<h1 id="&#x5305;&#x4F53;&#x79EF;&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><a name="&#x5305;&#x4F53;&#x79EF;&#x4F18;&#x5316;-&#x5B8C;&#x6210;" class="anchor-navigation-ex-anchor" href="#&#x5305;&#x4F53;&#x79EF;&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><i class="fa fa-link" aria-hidden="true"></i></a>10. &#x5305;&#x4F53;&#x79EF;&#x4F18;&#x5316; (&#x5B8C;&#x6210;)</h1>
<h2 id="&#x4F18;&#x5316;-apk-&#x4F53;&#x79EF;&#x7684;&#x610F;&#x4E49;"><a name="&#x4F18;&#x5316;-apk-&#x4F53;&#x79EF;&#x7684;&#x610F;&#x4E49;" class="anchor-navigation-ex-anchor" href="#&#x4F18;&#x5316;-apk-&#x4F53;&#x79EF;&#x7684;&#x610F;&#x4E49;"><i class="fa fa-link" aria-hidden="true"></i></a>10.1. &#x4F18;&#x5316; APK &#x4F53;&#x79EF;&#x7684;&#x610F;&#x4E49;</h2>
<pre><code class="lang-text">1&#x3001;&#x7626;&#x8EAB;&#x4F18;&#x5316;&#x6700;&#x4E3B;&#x8981;&#x7684;&#x597D;&#x5904;&#x662F;&#x5BF9;&#x5E94;&#x7528; &#x4E0B;&#x8F7D;&#x8F6C;&#x5316;&#x7387; &#x7684;&#x5F71;&#x54CD;&#xFF0C;
&#x5982;&#x679C;&#x4F60;&#x7684; App &#x4E0E;&#x5176;&#x5B83;&#x540C;&#x7C7B;&#x578B;&#x7684; App &#x76F8;&#x6BD4; Apk &#x4F53;&#x79EF;&#x8981;&#x66F4;&#x5C0F;&#x7684;&#x8BDD;&#xFF0C;
&#x90A3;&#x4E48;&#x4F60;&#x7684; App &#x4E0B;&#x8F7D;&#x7387;&#x5C31;&#x53EF;&#x80FD;&#x8981;&#x9AD8;&#x4E00;&#x4E9B;&#x3002;
&#x5305;&#x4F53;&#x79EF;&#x8D8A;&#x5C0F;&#xFF0C;&#x7528;&#x6237;&#x4E0B;&#x8F7D;&#x7B49;&#x5F85;&#x7684;&#x65F6;&#x95F4;&#x4F1A;&#x8D8A;&#x77ED;&#xFF0C;&#x4E0B;&#x8F7D;&#x8F6C;&#x6362;&#x6210;&#x529F;&#x7387;&#x5C31;&#x8D8A;&#x9AD8;&#x3002;

2&#x3001;&#x6709;&#x4E9B;&#x5E94;&#x7528;&#x5546;&#x5E97;&#x5BF9;APP&#x7684;&#x5927;&#x5C0F;&#x6709;&#x9650;&#x5236;&#xFF0C;
&#x4EE5;&#x8C37;&#x6B4C;&#x5E94;&#x7528;&#x5546;&#x5E97;&#x4E3A;&#x4F8B;&#xFF0C;&#x5C31;&#x6709;150M &#x7684;&#x9650;&#x5236;&#x3002;
With Android App Bundles, the compressed download size restriction is now 150MB &#x3002;&#xFF08;2021-3-17 &#x8BB0;&#x5F55;&#xFF0C;&#x4EE5;&#x540E;&#x53EF;&#x80FD;&#x4F1A;&#x6539;&#xFF09;

3&#x3001;&#x4E00;&#x4E9B;&#x6E20;&#x9053;&#x5408;&#x4F5C;&#x5546;&#x7684;&#x8981;&#x6C42;&#xFF0C;&#x6BD4;&#x5982;&#x9884;&#x88C5;&#x5E94;&#x7528;&#xFF0C;&#x9650;&#x5236;APP&#x5927;&#x5C0F;&#x6216;&#x8005;&#x6839;&#x636E;&#x5927;&#x5C0F;&#x6536;&#x8D39;&#x3002;

4&#x3001;apk &#x8FC7;&#x5927; &#x5BF9;&#x7528;&#x6237;&#x7684;&#x4F7F;&#x7528;&#x4F53;&#x9A8C;&#x6709;&#x5F71;&#x54CD;&#x3002;
&#x6587;&#x4EF6;&#x7684;&#x62F7;&#x8D1D;&#x3001;&#x89E3;&#x538B;&#x3001;&#x521D;&#x59CB;&#x5316; &#x4F1A;&#x6D88;&#x8017;&#x6BD4;&#x8F83;&#x5E38;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x8BA9;&#x7528;&#x6237;&#x7B49;&#x5F85;&#x8FC7;&#x4E45;&#x3002;
&#x540C;&#x65F6;&#x4E5F;&#x5360;&#x7528;&#x8FC7;&#x5927;&#x7684;SD&#x7A7A;&#x95F4;&#xFF0C;&#x4F8B;&#x5982;&#x738B;&#x8005;&#x8363;&#x8000;&#x5360;&#x7528;&#x7A7A;&#x95F4;&#x56DB;&#x4E94;&#x4E2A;G&#xFF0C;&#x662F;&#x6211;&#x5378;&#x8F7D;&#x5B83;&#x7684;&#x539F;&#x56E0;&#x3002;
</code></pre>
<h2 id="apk-&#x7684;&#x7EC4;&#x6210;"><a name="apk-&#x7684;&#x7EC4;&#x6210;" class="anchor-navigation-ex-anchor" href="#apk-&#x7684;&#x7EC4;&#x6210;"><i class="fa fa-link" aria-hidden="true"></i></a>10.2. apk &#x7684;&#x7EC4;&#x6210;</h2>
<pre><code class="lang-text">1&#x3001;&#x4EE3;&#x7801;&#x76F8;&#x5173; classes.dex
2&#x3001;&#x8D44;&#x6E90;&#x76F8;&#x5173;&#xFF1A;res&#x3001;assets &#xFF0C;&#x5B58;&#x653E;&#x56FE;&#x7247;&#x548C;&#x97F3;&#x9891;&#x7B49;&#x3002; &#x4F18;&#x5316;&#x7A7A;&#x95F4;&#x8F83;&#x5927;&#xFF0C;&#x5C24;&#x5176;&#x662F;&#x56FE;&#x7247;&#x3002;
3&#x3001;lib &#x3001;So &#x76F8;&#x5173;&#x3002;&#x8FD9;&#x4E00;&#x5757;&#x7684;&#x4F18;&#x5316;&#x7A7A;&#x95F4;&#x6BD4;&#x8F83;&#x5927;&#x3002;
</code></pre>
<h2 id="apk-&#x4F53;&#x79EF;&#x4F18;&#x5316;&#x65B9;&#x6848;"><a name="apk-&#x4F53;&#x79EF;&#x4F18;&#x5316;&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#apk-&#x4F53;&#x79EF;&#x4F18;&#x5316;&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3. APK &#x4F53;&#x79EF;&#x4F18;&#x5316;&#x65B9;&#x6848;</h2>
<h3 id="proguard-&#x4EE3;&#x7801;&#x6DF7;&#x6DC6;-&#x5EFA;&#x8BAE;"><a name="proguard-&#x4EE3;&#x7801;&#x6DF7;&#x6DC6;-&#x5EFA;&#x8BAE;" class="anchor-navigation-ex-anchor" href="#proguard-&#x4EE3;&#x7801;&#x6DF7;&#x6DC6;-&#x5EFA;&#x8BAE;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.1. Proguard &#x4EE3;&#x7801;&#x6DF7;&#x6DC6; (&#x5EFA;&#x8BAE;)</h3>
<pre><code class="lang-text">Android &#x6709;&#x81EA;&#x5E26;&#x7684;&#x6DF7;&#x6DC6;&#x5DE5;&#x5177; Proguard  &#x3002;
&#x5C06;&#x7C7B;&#x4E2D;&#x7684;&#x5B57;&#x6BB5;&#x3001;&#x65B9;&#x6CD5;&#x3001;&#x7C7B;&#x7684;&#x540D;&#x79F0;&#x6539;&#x6210;&#x7B80;&#x77ED;&#x65E0;&#x610F;&#x4E49;&#x7684;&#x540D;&#x5B57;&#x3002;
&#x4F8B;&#x5982; ActivityMainBinding &#x88AB;&#x6DF7;&#x6DC6;&#x66FF;&#x6362;&#x6210;&#x4E86; &#x4E00;&#x4E2A;&#x5B57;&#x6BCD; a .
&#x6DF7;&#x6DC6;&#x540E;&#xFF0C;&#x589E;&#x52A0;&#x4EE3;&#x7801;&#x88AB;&#x53CD;&#x7F16;&#x8BD1;&#x7684;&#x96BE;&#x5EA6;&#xFF0C;&#x4E00;&#x5B9A;&#x7A0B;&#x5EA6;&#x4E0A;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x7684;&#x5B89;&#x5168;&#x3002;
&#x5E76;&#x4E14;&#x51CF;&#x5C11;&#x4E86;&#x4EE3;&#x7801;&#x7684;&#x4F53;&#x79EF;&#x3002;

&#x540C;&#x65F6; Proguard &#x53EF;&#x4EE5;&#x68C0;&#x6D4B;&#x5E76;&#x79FB;&#x9664;&#x672A;&#x4F7F;&#x7528;&#x5230;&#x7684;&#x7C7B;&#x3001;&#x65B9;&#x6CD5;&#x3001;&#x5B57;&#x6BB5;&#x4EE5;&#x53CA;&#x6307;&#x4EE4;&#x3001;
&#x5197;&#x4F59;&#x4EE3;&#x7801;&#xFF0C;&#x5E76;&#x80FD;&#x591F;&#x5BF9;&#x5B57;&#x8282;&#x7801;&#x8FDB;&#x884C;&#x6DF1;&#x5EA6;&#x4F18;&#x5316;&#x3002;
</code></pre>
<h3 id="r8-&#x4EE3;&#x7801;&#x6DF7;&#x6DC6;"><a name="r8-&#x4EE3;&#x7801;&#x6DF7;&#x6DC6;" class="anchor-navigation-ex-anchor" href="#r8-&#x4EE3;&#x7801;&#x6DF7;&#x6DC6;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.2. R8 &#x4EE3;&#x7801;&#x6DF7;&#x6DC6;</h3>
<p><a href="https://r8.googlesource.com/r8" target="_blank">https://r8.googlesource.com/r8</a></p>
<pre><code class="lang-text">R8 &#x662F; Proguard &#x538B;&#x7F29;&#x4E0E;&#x4F18;&#x5316;&#x90E8;&#x5206;&#x7684;&#x66FF;&#x4EE3;&#x54C1;&#xFF0C;&#x5E76;&#x4E14;&#x5B83;&#x4ECD;&#x7136;&#x4F7F;&#x7528;&#x4E0E; Proguard &#x4E00;&#x6837;&#x7684; keep &#x89C4;&#x5219;&#x3002;

&#x5F53;&#x4F7F;&#x7528; Android Gradle &#x63D2;&#x4EF6; 3.4.0 &#x6216;&#x66F4;&#x9AD8;&#x7248;&#x672C;&#x6784;&#x5EFA;&#x9879;&#x76EE;&#x65F6;&#xFF0C;
&#x4E0D;&#x518D;&#x4F7F;&#x7528; ProGuard &#x6765;&#x6267;&#x884C;&#x7F16;&#x8BD1;&#x65F6;&#x4EE3;&#x7801;&#x4F18;&#x5316;&#xFF0C;&#x800C;&#x662F;&#x4E0E; R8 &#x7F16;&#x8BD1;&#x5668;&#x534F;&#x540C;&#x5DE5;&#x4F5C;&#x6765;&#x5904;&#x7406;&#x7F16;&#x8BD1;&#x65F6;&#x4EFB;&#x52A1; &#x3002;

R8 &#x4E0E; Proguard &#x6BD4;&#x8F83; &#xFF0C;
R8 &#x5728; inline &#x5185;&#x8054;&#x5BB9;&#x5668;&#x7C7B;&#x4E2D;&#x66F4;&#x6709;&#x6548;&#xFF0C;&#x5E76;&#x4E14;&#x5728;&#x5220;&#x9664;&#x672A;&#x4F7F;&#x7528;&#x7684;&#x7C7B;&#xFF0C;&#x5B57;&#x6BB5;&#x548C;&#x65B9;&#x6CD5;&#x4E0A;&#x5219;&#x66F4;&#x5177;&#x4FB5;&#x7565;&#x6027;&#x3002;
&#x5E76;&#x4E14; &#xFF0C;R8 &#x8FDB;&#x884C;&#x4E86; ProGuard &#x5C1A;&#x672A;&#x63D0;&#x4F9B;&#x7684;&#x4E00;&#x4E9B; Kotlin &#x7684;&#x7279;&#x5B9A;&#x7684;&#x4F18;&#x5316;&#x3002;

release {
    // &#x542F;&#x7528;&#x4EE3;&#x7801;&#x6536;&#x7F29;&#x3001;&#x6DF7;&#x6DC6;&#x548C;&#x4F18;&#x5316;&#x3002;
    minifyEnabled true
    // &#x542F;&#x7528;&#x8D44;&#x6E90;&#x7F29;&#x51CF;
    shrinkResources true
    // proguard-android-optimize.txt &#x8FD9;&#x662F;&#x9ED8;&#x8BA4;&#x7684;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x5305;&#x542B;&#x4E00;&#x4E9B;&#x901A;&#x7528;&#x7684;&#x6DF7;&#x6DC6;&#x89C4;&#x5219;&#xFF0C;&#x5728;sdk/tools/proguard&#x76EE;&#x5F55;&#x4E0B;
    // proguard-rules.pro &#x4F9B;&#x5F00;&#x53D1;&#x8005;&#x81EA;&#x5B9A;&#x4E49;&#x6DF7;&#x6DC6;&#x89C4;&#x5219;
    proguardFiles getDefaultProguardFile(&apos;proguard-android-optimize.txt&apos;), &apos;proguard-rules.pro&apos;
}

# google &#x63A8;&#x8350;&#x7684;&#x6DF7;&#x6DC6;&#x7B97;&#x6CD5;
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
# &#x6307;&#x5B9A;&#x6267;&#x884C;&#x51E0;&#x6B21;&#x4F18;&#x5316;&#xFF0C;&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x53EA;&#x6267;&#x884C;&#x4E00;&#x6B21;&#x4F18;&#x5316;&#x3002;
-optimizationpasses 5
# &#x5141;&#x8BB8;&#x6539;&#x53D8;&#x4F5C;&#x7528;&#x57DF;&#x7684; &#xFF0C;&#x4F8B;&#x5982;&#x5C06; public &#x6539;&#x6210; private &#xFF0C;&#x5982;&#x679C;&#x662F;&#x5BF9;&#x5916;&#x7684;lib&#xFF0C;&#x4E0D;&#x8981;&#x914D;&#x7F6E;
-allowaccessmodification
# &#x4E0D;&#x505A;&#x9884;&#x6821;&#x9A8C;&#xFF0C;&#x9884;&#x6821;&#x9A8C;&#x662F;&#x4F5C;&#x7528;&#x5728;Java&#x5E73;&#x53F0;&#x4E0A;&#x7684;&#xFF0C;Android&#x5E73;&#x53F0;&#x4E0A;&#x4E0D;&#x9700;&#x8981;&#x8FD9;&#x9879;&#x529F;&#x80FD;
-dontpreverify
# &#x6DF7;&#x6DC6;&#x65F6;&#x4E0D;&#x4F7F;&#x7528;&#x5927;&#x5C0F;&#x5199;&#x6DF7;&#x5408;&#x7C7B;&#x540D;
-dontusemixedcaseclassnames
#&#x4E0D;&#x5FFD;&#x7565;&#x5E93;&#x4E2D;&#x7684;&#x975E;public&#x7684;&#x7C7B;
-dontskipnonpubliclibraryclasses
# &#x8F93;&#x51FA;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;
-verbose
#&#x4F7F;&#x6307;&#x5B9A;&#x7684;&#x7C7B;&#x4E0D;&#x8F93;&#x51FA;&#x8B66;&#x544A;&#x4FE1;&#x606F;
-dontwarn android.support.**
# &#x4FDD;&#x7559;&#x6307;&#x5B9A;&#x7684;&#x5C5E;&#x6027;&#xFF0C;&#x4E0D;&#x6DF7;&#x6DC6;
-keepattributes *Annotation*
# &#x4FDD;&#x6301;&#x6307;&#x5B9A;&#x5305;&#x4E0B;&#x7684;&#x7C7B;&#x540D; &#x4E0D;&#x6DF7;&#x6DC6;
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
-keep class android.support.annotation.Keep
#&#x4FDD;&#x6301;&#x6307;&#x5B9A;&#x5305;&#x4E0B;&#x7684;&#x7C7B;&#x540D;&#x4EE5;&#x53CA;&#x7C7B;&#x91CC;&#x9762;&#x7684;&#x5185;&#x5BB9;
-keep @android.support.annotation.Keep class * {*;}
#&#x4FDD;&#x6301;&#x6307;&#x5B9A;&#x5305;&#x4E0B;&#x7684;&#x7C7B;&#x540D;&#xFF0C;&#x4E0D;&#x5305;&#x62EC;&#x5B50;&#x5305;&#x4E0B;&#x7684;&#x7C7B;&#x540D;

# &#x5982;&#x679C;&#x62E5;&#x6709;&#x67D0;&#x6210;&#x5458;&#xFF0C;&#x4FDD;&#x7559;&#x7C7B;&#x548C;&#x7C7B;&#x6210;&#x5458; &#xFF0C;&#x9632;&#x6B62;&#x88AB;&#x6DF7;&#x6DC6;
-keepclasseswithmembernames class * {
    native &lt;methods&gt;;
}

# &#x7C7B;&#x6210;&#x5458; &#x9632;&#x6B62;&#x88AB;&#x79FB;&#x9664;&#x6216;&#x8005;&#x88AB;&#x6DF7;&#x6DC6;
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers public class * extends android.view.View {
   void set*(***);
   *** get*();
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepclassmembers class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
    public static &lt;fields&gt;;
}

# &#x5982;&#x679C;&#x62E5;&#x6709;&#x67D0;&#x6210;&#x5458;&#xFF0C;&#x4FDD;&#x7559;&#x7C7B;&#x548C;&#x7C7B;&#x6210;&#x5458; &#xFF0C;&#x9632;&#x6B62;&#x88AB;&#x79FB;&#x9664;&#x6216;&#x8005;&#x88AB;&#x6DF7;&#x6DC6;
-keepclasseswithmembers class * {
    @android.support.annotation.Keep &lt;methods&gt;;
}

-keepclasseswithmembers class * {
    @android.support.annotation.Keep &lt;fields&gt;;
}

-keepclasseswithmembers class * {
    @android.support.annotation.Keep &lt;init&gt;(...);
}
</code></pre>
<h3 id="&#x4F7F;&#x7528;-d8-&#x7F16;&#x8BD1;&#x5668;"><a name="&#x4F7F;&#x7528;-d8-&#x7F16;&#x8BD1;&#x5668;" class="anchor-navigation-ex-anchor" href="#&#x4F7F;&#x7528;-d8-&#x7F16;&#x8BD1;&#x5668;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.3. &#x4F7F;&#x7528; D8 &#x7F16;&#x8BD1;&#x5668;</h3>
<pre><code class="lang-text">Google &#x5728; Android Studio 3.1 &#x7248;&#x672C;&#x4E2D;&#x5F15;&#x5165; D8 &#x7F16;&#x8BD1;&#x5668;&#x4F5C;&#x4E3A;&#x9ED8;&#x8BA4;&#x7684; DEX &#x5B57;&#x8282;&#x7801;&#x6587;&#x4EF6;&#x7F16;&#x8BD1;&#x5668;&#x3002;
&#x901A;&#x8FC7;&#x5728; gradle.properties &#x4E2D;&#x65B0;&#x589E; android.enableD8=true &#x5F00;&#x542F; D8 &#x7F16;&#x8BD1;&#x5668;&#x3002;

D8 &#x7F16;&#x8BD1;&#x5668;&#x7279;&#x70B9;&#x662F;&#xFF1A;
&#x7F16;&#x8BD1;&#x66F4;&#x5FEB;&#x3001;&#x65F6;&#x95F4;&#x66F4;&#x77ED;&#xFF1B;
DEX &#x7F16;&#x8BD1;&#x65F6;&#x5360;&#x7528;&#x5185;&#x5BB9;&#x66F4;&#x5C0F;&#xFF1B;
.dex &#x6587;&#x4EF6;&#x5927;&#x5C0F;&#x66F4;&#x5C0F;&#xFF1B;
D8 &#x7F16;&#x8BD1;&#x7684; .dex &#x6587;&#x4EF6;&#x62E5;&#x6709;&#x76F8;&#x540C;&#x6216;&#x8005;&#x662F;&#x66F4;&#x597D;&#x7684;&#x8FD0;&#x884C;&#x65F6;&#x6027;&#x80FD;&#xFF1B;
</code></pre>
<h3 id="redex-&#x53BB;&#x9664;-debug-&#x4FE1;&#x606F;&#x4E0E;&#x884C;&#x53F7;&#x4FE1;&#x606F;"><a name="redex-&#x53BB;&#x9664;-debug-&#x4FE1;&#x606F;&#x4E0E;&#x884C;&#x53F7;&#x4FE1;&#x606F;" class="anchor-navigation-ex-anchor" href="#redex-&#x53BB;&#x9664;-debug-&#x4FE1;&#x606F;&#x4E0E;&#x884C;&#x53F7;&#x4FE1;&#x606F;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.4. redex &#x53BB;&#x9664; debug &#x4FE1;&#x606F;&#x4E0E;&#x884C;&#x53F7;&#x4FE1;&#x606F;</h3>
<pre><code class="lang-text">-keepattributes SourceFile,LineNumberTable ,
&#x5982;&#x679C;&#x5728;&#x6DF7;&#x6DC6;&#x5F00;&#x542F;&#x540E;&#xFF0C;&#x5F00;&#x542F;&#x4E86;&#x8FD9;&#x4E2A;&#x8BED;&#x53E5;&#xFF0C;&#x5C31;&#x4F1A;&#x4FDD;&#x7559; dex &#x4E2D;&#x7684;  debug &#x548C; &#x884C;&#x53F7;&#x4FE1;&#x606F;,&#x7528;&#x4E8E;&#x6DF7;&#x6DC6;&#x540E;&#x5B9A;&#x4F4D;&#x9519;&#x8BEF;&#x4F4D;&#x7F6E;&#x3002;

&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x60F3;&#x529E;&#x6CD5;&#x53BB;&#x6389;&#x884C; dex &#x4E2D;&#x7684;debug &#x548C;&#x884C;&#x53F7;&#x4FE1;&#x606F;&#x6765;&#x51CF;&#x5C0F; apk &#x4F53;&#x79EF;&#x3002;
&#x6709;&#x4EC0;&#x4E48;&#x65B9;&#x5F0F;&#x53EF;&#x4EE5;&#x53BB;&#x6389;  debugItem&#xFF0C;&#x540C;&#x65F6;&#x53C8;&#x80FD;&#x8BA9; crash &#x4E0A;&#x62A5;&#x7684;&#x65F6;&#x5019;&#x80FD;&#x62FF;&#x5230;&#x6B63;&#x786E;&#x7684;&#x884C;&#x53F7;&#x5462;&#xFF1F;
&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5C1D;&#x8BD5;&#x76F4;&#x63A5;&#x4FEE;&#x6539; Dex &#x6587;&#x4EF6;&#xFF0C;&#x4FDD;&#x7559;&#x4E00;&#x5C0F;&#x5757;  debugItem&#xFF0C;
&#x8BA9;&#x7CFB;&#x7EDF;&#x67E5;&#x627E;&#x884C;&#x53F7;&#x7684;&#x65F6;&#x5019;&#x6307;&#x4EE4;&#x96C6;&#x884C;&#x53F7;&#x548C;&#x6E90;&#x6587;&#x4EF6;&#x884C;&#x53F7;&#x4FDD;&#x6301;&#x4E00;&#x81F4;&#x3002;
&#x5177;&#x4F53;&#x64CD;&#x4F5C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x7B2C;&#x4E09;&#x65B9;&#x5DE5;&#x5177;&#xFF0C;redex &#x3002;
</code></pre>
<h3 id="redex-&#xFF0C;-dex-&#x5206;&#x5305;&#x4F18;&#x5316;"><a name="redex-&#xFF0C;-dex-&#x5206;&#x5305;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#redex-&#xFF0C;-dex-&#x5206;&#x5305;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.5. redex &#xFF0C; Dex &#x5206;&#x5305;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x5F53; app &#x7684;&#x65B9;&#x6CD5;&#x6570;&#x8D85;&#x8FC7;65536&#x4E2A;&#xFF0C;&#x5C31;&#x8981;&#x91C7;&#x7528; mutildex &#x8FDB;&#x884C;&#x5206;&#x5305;&#xFF0C;
&#x4F46;&#x662F;&#x6B64;&#x65F6;&#x6BCF;&#x4E00;&#x4E2A; Dex &#x53EF;&#x80FD;&#x4F1A;&#x8C03;&#x7528;&#x5230;&#x5176;&#x5B83; Dex &#x4E2D;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x8FD9;&#x79CD; &#x8DE8; Dex &#x8C03;&#x7528;&#x7684;&#x65B9;&#x5F0F;&#x4F1A;&#x9020;&#x6210;&#x8BB8;&#x591A;&#x5197;&#x4F59;&#x4FE1;&#x606F;&#x3002;
&#x4E3A;&#x4E86;&#x51CF;&#x5C11;&#x8DE8; Dex &#x8C03;&#x7528;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x6211;&#x4EEC;&#x5FC5;&#x987B; &#x5C3D;&#x91CF;&#x5C06;&#x6709;&#x8C03;&#x7528;&#x5173;&#x7CFB;&#x7684;&#x7C7B;&#x548C;&#x65B9;&#x6CD5;&#x5206;&#x914D;&#x5230;&#x540C;&#x4E00;&#x4E2A; Dex &#x4E2D;&#x3002;

ReDex &#x7684; CrossDexDefMinimizer &#x7C7B;&#x5206;&#x6790;&#x4E86;&#x7C7B;&#x4E4B;&#x95F4;&#x7684;&#x8C03;&#x7528;&#x5173;&#x7CFB;&#xFF0C;
&#x5E76;&#x4F7F;&#x7528;&#x4E86;&#x8D2A;&#x5FC3;&#x7B97;&#x6CD5;&#x53BB;&#x8BA1;&#x7B97;&#x5C40;&#x90E8;&#x7684;&#x6700;&#x4F18;&#x89E3;&#xFF08;&#x7F16;&#x8BD1;&#x6548;&#x679C;&#x548C;dex&#x4F18;&#x5316;&#x6548;&#x679C;&#x4E4B;&#x95F4;&#x7684;&#x67D0;&#x4E00;&#x4E2A;&#x5E73;&#x8861;&#x70B9;&#xFF09;&#x3002;
&#x4F7F;&#x7528; &quot;InterDexPass&quot; &#x914D;&#x7F6E;&#x9879;&#x53EF;&#x4EE5;&#x628A;&#x4E92;&#x76F8;&#x5F15;&#x7528;&#x7684;&#x7C7B;&#x5C3D;&#x91CF;&#x653E;&#x5728;&#x540C;&#x4E2A; Dex

&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; facebook &#x63D0;&#x4F9B;&#x7684; redex &#x6765;&#x8FDB;&#x884C;&#x4F18;&#x5316;
https://github.com/facebook/redex
ReDex &#x53EF;&#x4EE5;&#x5206;&#x5305;&#x4F18;&#x5316;&#x3001;&#x53BB;&#x9664; debug &#x4FE1;&#x606F;&#x53CA;&#x884C;&#x53F7;&#x4FE1;&#x606F;&#x3002;
</code></pre>
<h3 id="xz-utils-&#x8FDB;&#x884C;-dex-&#x538B;&#x7F29;"><a name="xz-utils-&#x8FDB;&#x884C;-dex-&#x538B;&#x7F29;" class="anchor-navigation-ex-anchor" href="#xz-utils-&#x8FDB;&#x884C;-dex-&#x538B;&#x7F29;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.6. XZ Utils &#x8FDB;&#x884C; Dex &#x538B;&#x7F29;</h3>
<pre><code class="lang-text">https://tukaani.org/xz/ 
&#x6709;&#x4E9B;&#x5927;&#x516C;&#x53F8;(facebook ?)&#x5728;&#x7528; xz utils &#x5BF9; Dex &#x8FDB;&#x884C;&#x538B;&#x7F29;&#x4F18;&#x5316;&#xFF0C;
&#x4E0D;&#x8FC7;&#x96BE;&#x5EA6;&#x8F83;&#x5927;&#x3002;
</code></pre>
<h3 id="&#x53BB;&#x6389;&#x5197;&#x4F59;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;-&#x5EFA;&#x8BAE;"><a name="&#x53BB;&#x6389;&#x5197;&#x4F59;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;-&#x5EFA;&#x8BAE;" class="anchor-navigation-ex-anchor" href="#&#x53BB;&#x6389;&#x5197;&#x4F59;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x5E93;-&#x5EFA;&#x8BAE;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.7. &#x53BB;&#x6389;&#x5197;&#x4F59;&#x7684;&#x7B2C;&#x4E09;&#x65B9;&#x5E93; (&#x5EFA;&#x8BAE;)</h3>
<pre><code class="lang-text">&#x6BD4;&#x5982;&#x6709;&#x4E9B;&#x5E93;&#x4F1A;&#x63D0;&#x4F9B; &#x56FE;&#x7247;&#x52A0;&#x8F7D;&#x3001;&#x7F51;&#x7EDC;&#x8BBF;&#x95EE;&#x3001;&#x6570;&#x636E;&#x7B49;&#xFF0C;
&#x4F46;&#x662F;&#x4F60;&#x53EA;&#x9700;&#x8981;&#x8981;&#x7528;&#x5230; &#x6570;&#x636E;&#x5E93;&#xFF0C;&#x4F60;&#x5C31;&#x53EF;&#x4EE5;&#x5C06;&#x5176;&#x4ED6;&#x7684;&#x6CA1;&#x7528;&#x4E0A;&#x7684;&#x5E93;&#x53BB;&#x6389;&#x3002;
&#x53EF;&#x4EE5; &#x53EA;&#x5F15;&#x5165;&#x90E8;&#x5206;&#x9700;&#x8981;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x5C06;&#x6574;&#x4E2A;&#x5305;&#x7684;&#x4EE3;&#x7801;&#x90FD;&#x5F15;&#x5165;&#x8FDB;&#x6765;&#x3002;
&#x5F88;&#x591A;&#x5E93;&#x7684;&#x4EE3;&#x7801;&#x7ED3;&#x6784;&#x90FD;&#x8BBE;&#x8BA1;&#x7684;&#x6BD4;&#x8F83;&#x597D;&#xFF0C;&#x6BD4;&#x5982; Fresco&#xFF0C;&#x5B83;&#x5C06;&#x56FE;&#x7247;&#x52A0;&#x8F7D;&#x7684;&#x5404;&#x4E2A;&#x529F;&#x80FD;&#xFF0C;&#x5982; webp&#x3001;gif &#x529F;&#x80FD;&#x8FDB;&#x884C;&#x4E86;&#x5265;&#x79BB;&#xFF0C;
&#x5B83;&#x4EEC;&#x90FD;&#x5904;&#x4E8E;&#x5355;&#x4E2A;&#x7684;&#x5E93;&#x5F53;&#x4E2D;&#x3002;

&#x540C;&#x65F6;&#x6CE8;&#x610F;&#x540C;&#x4E00;&#x4E2A;APP&#x4E2D;&#x5C3D;&#x91CF;&#x4E0D;&#x8981;&#x6709;&#x76F8;&#x540C;&#x7684;&#x5E93;&#xFF0C;
&#x6BD4;&#x5982;&#x4E0D;&#x8981;&#x6709;&#x4E24;&#x4E2A;&#x56FE;&#x7247;&#x52A0;&#x8F7D;&#x5E93;&#x3002;
</code></pre>
<h3 id="&#x5220;&#x9664;&#x65E0;&#x7528;&#x4EE3;&#x7801;&#x3001;&#x65E0;&#x7528;&#x8D44;&#x6E90;-&#x5EFA;&#x8BAE;"><a name="&#x5220;&#x9664;&#x65E0;&#x7528;&#x4EE3;&#x7801;&#x3001;&#x65E0;&#x7528;&#x8D44;&#x6E90;-&#x5EFA;&#x8BAE;" class="anchor-navigation-ex-anchor" href="#&#x5220;&#x9664;&#x65E0;&#x7528;&#x4EE3;&#x7801;&#x3001;&#x65E0;&#x7528;&#x8D44;&#x6E90;-&#x5EFA;&#x8BAE;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.8. &#x5220;&#x9664;&#x65E0;&#x7528;&#x4EE3;&#x7801;&#x3001;&#x65E0;&#x7528;&#x8D44;&#x6E90; (&#x5EFA;&#x8BAE;)</h3>
<pre><code class="lang-text">&#x53EF;&#x4EE5;&#x501F;&#x52A9; lint &#x5DE5;&#x5177;&#x7B49; &#x68C0;&#x6D4B;&#x51FA;&#x65E0;&#x7528;&#x7684;&#x4EE3;&#x7801;&#x548C;&#x8D44;&#x6E90;&#xFF0C;&#x5220;&#x9664;&#x51CF;&#x5C11;&#x5305;&#x4F53;&#x79EF;&#x3002;

&#x6587;&#x4EF6;&#x76F8;&#x540C;&#xFF0C;&#x6587;&#x4EF6;&#x540D;&#x4E0D;&#x540C;&#x3002;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;MD5 &#x53BB;&#x8BC6;&#x522B;&#x3002;
</code></pre>
<h3 id="&#x81EA;&#x5E26;&#x7684;-&#x8D44;&#x6E90;&#x53BB;&#x91CD;-&#x914D;&#x7F6E;"><a name="&#x81EA;&#x5E26;&#x7684;-&#x8D44;&#x6E90;&#x53BB;&#x91CD;-&#x914D;&#x7F6E;" class="anchor-navigation-ex-anchor" href="#&#x81EA;&#x5E26;&#x7684;-&#x8D44;&#x6E90;&#x53BB;&#x91CD;-&#x914D;&#x7F6E;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.9. &#x81EA;&#x5E26;&#x7684; &#x8D44;&#x6E90;&#x53BB;&#x91CD; &#x914D;&#x7F6E;</h3>
<pre><code class="lang-text">// &#x9632;&#x6B62;&#x540C;&#x540D;&#x8D44;&#x6E90;
1&#x3001;&#x4ECE;&#x6E90;&#x5934;&#x63A7;&#x5236;&#xFF0C;&#x914D;&#x7F6E; resourcePrefix &#x6307;&#x5B9A;&#x524D;&#x7F00;&#xFF0C;
xml&#x8D44;&#x6E90;&#x4F1A;&#x7EA2;&#x8272;&#x63D0;&#x793A;(&#x4F46;&#x662F;&#x4E0D;&#x5F71;&#x54CD;&#x8FD0;&#x884C;)&#x4F60;&#x8981;&#x52A0;&#x524D;&#x7F00;&#x3002;
&#x56FE;&#x7247;&#x8D44;&#x6E90;&#x6CA1;&#x6709;&#x63D0;&#x793A;&#xFF0C;&#x9700;&#x8981;&#x6709;&#x610F;&#x8BC6;&#x5730;&#x6DFB;&#x52A0;&#x3002;
android {
    resourcePrefix &quot;app_&quot;
}

2&#x3001;&#x56FE;&#x7247;&#x76F8;&#x540C;&#xFF0C;&#x540D;&#x5B57;&#x4E0D;&#x4E00;&#x6837;&#x3002;&#x6587;&#x4EF6;&#x53BB;&#x91CD; &#x65B9;&#x6CD5;&#x3002;
&#x8FD9;&#x91CC;&#x5199;&#x4E86;&#x4E00;&#x4E2A; Md5&#x6587;&#x4EF6;&#x53BB;&#x91CD; &#x793A;&#x4F8B;&#x3002;
https://gitee.com/Aivin_CodeShare/android_tool_code/raw/master/md5%E6%96%87%E4%BB%B6%E5%8E%BB%E9%87%8D/CalcMD5.java
</code></pre>
<h3 id="&#x56FE;&#x7247;&#x538B;&#x7F29;&#x3001;&#x56FE;&#x7247;&#x683C;&#x5F0F;-&#x5EFA;&#x8BAE;"><a name="&#x56FE;&#x7247;&#x538B;&#x7F29;&#x3001;&#x56FE;&#x7247;&#x683C;&#x5F0F;-&#x5EFA;&#x8BAE;" class="anchor-navigation-ex-anchor" href="#&#x56FE;&#x7247;&#x538B;&#x7F29;&#x3001;&#x56FE;&#x7247;&#x683C;&#x5F0F;-&#x5EFA;&#x8BAE;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.10. &#x56FE;&#x7247;&#x538B;&#x7F29;&#x3001;&#x56FE;&#x7247;&#x683C;&#x5F0F; (&#x5EFA;&#x8BAE;)</h3>
<pre><code class="lang-text">&#x53EF;&#x4EE5;&#x4F7F;&#x7528; https://tingpng.com/ &#x538B;&#x7F29;&#x56FE;&#x7247;&#x5927;&#x5C0F;&#x3002;

&#x56FE;&#x7247;&#x683C;&#x5F0F;&#x4E0D;&#x540C;&#xFF0C;&#x4E5F;&#x4F1A;&#x5BFC;&#x81F4;&#x5927;&#x5C0F;&#x76F8;&#x5DEE;&#x8F83;&#x5927;&#x3002;
&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x4EE5;&#x4E0B;&#x89C4;&#x5219;&#x8FDB;&#x884C;&#x4F18;&#x5148;&#x9009;&#x62E9;&#x3002;
VectorDrawable&#xFF08;&#x77E2;&#x91CF;&#x56FE;&#xFF09;-&gt; WebP -&gt;Png&#xFF08;&#x6709;&#x900F;&#x660E;&#x901A;&#x9053;&#xFF09; -&gt; jpg&#xFF08;&#x65E0;alpha&#x901A;&#x9053;&#xFF09;
</code></pre>
<h3 id="&#x5220;&#x9664;-java-access-&#x65B9;&#x6CD5;"><a name="&#x5220;&#x9664;-java-access-&#x65B9;&#x6CD5;" class="anchor-navigation-ex-anchor" href="#&#x5220;&#x9664;-java-access-&#x65B9;&#x6CD5;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.11. &#x5220;&#x9664; Java access &#x65B9;&#x6CD5;</h3>
<pre><code class="lang-text">&#x53EF;&#x4EE5;&#x53C2;&#x8003;  &#x897F;&#x74DC;&#x6280;&#x672F;&#x56E2;&#x961F; &#x7684;&#x6587;&#x7AE0; &#x201C;&#x897F;&#x74DC;&#x89C6;&#x9891;apk&#x7626;&#x8EAB;&#x4E4B; Java access &#x65B9;&#x6CD5;&#x5220;&#x9664;&#x201D;

Java&#x8BED;&#x8A00;&#x7684;&#x5C01;&#x88C5;&#x6027;&#x8981;&#x6C42;&#x4E00;&#x4E2A;&#x7C7B;&#x7684;&#x79C1;&#x6709;&#x6210;&#x5458;&#x4E0D;&#x80FD;&#x88AB;&#x5176;&#x4ED6;&#x7C7B;&#x76F4;&#x63A5;&#x8BBF;&#x95EE;&#xFF0C;
&#x7136;&#x800C;&#x5185;&#x90E8;&#x7C7B;&#x548C;&#x5176;&#x5916;&#x90E8;&#x7C7B;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x8BBF;&#x95EE;&#x5BF9;&#x65B9;&#x7684;&#x79C1;&#x6709;&#x6210;&#x5458;&#xFF0C;&#x8FD9;&#x4E2A;&#x73B0;&#x8C61;&#x663E;&#x7136;&#x8FDD;&#x53CD;&#x4E86;Java&#x5C01;&#x88C5;&#x6027;&#x7684;&#x8981;&#x6C42;&#xFF0C;
&#x56E0;&#x6B64;&#x4E3A;&#x4E86;&#x80FD;&#x63D0;&#x4F9B;&#x5185;&#x90E8;&#x7C7B;&#x548C;&#x5176;&#x5916;&#x90E8;&#x7C7B;&#x76F4;&#x63A5;&#x8BBF;&#x95EE;&#x5BF9;&#x65B9;&#x7684;&#x79C1;&#x6709;&#x6210;&#x5458;&#x7684;&#x80FD;&#x529B;&#xFF0C;&#x53C8;&#x4E0D;&#x8FDD;&#x53CD;&#x5C01;&#x88C5;&#x6027;&#x8981;&#x6C42;&#xFF0C;
Java&#x7F16;&#x8BD1;&#x5668;&#x5728;&#x7F16;&#x8BD1;&#x8FC7;&#x7A0B;&#x4E2D;&#x81EA;&#x52A8;&#x751F;&#x6210;package&#x53EF;&#x89C1;&#x6027;&#x7684;&#x9759;&#x6001;access$xxx&#x65B9;&#x6CD5;&#xFF0C;
&#x5E76;&#x4E14;&#x5728;&#x9700;&#x8981;&#x8BBF;&#x95EE;&#x5BF9;&#x65B9;&#x79C1;&#x6709;&#x6210;&#x5458;&#x7684;&#x5730;&#x65B9;&#x6539;&#x4E3A;&#x8C03;&#x7528;&#x5BF9;&#x5E94;&#x7684;access&#x65B9;&#x6CD5;

access&#x65B9;&#x6CD5;&#x7684;&#x5F71;&#x54CD;
1&#x3001;dex&#x6587;&#x4EF6;&#x683C;&#x5F0F;&#x5BF9;&#x7C7B;&#x3001;&#x65B9;&#x6CD5;&#x3001;&#x5B57;&#x6BB5;&#x7684;&#x6570;&#x76EE;&#x6709;&#x9650;&#x5236;&#xFF0C;&#x8D85;&#x8FC7;65535&#x5C31;&#x5F97;&#x5206;&#x5305;&#x3002;
&#x56E0;&#x6B64;&#x989D;&#x5916;&#x751F;&#x6210;&#x7684;access&#x65B9;&#x6CD5;&#x6570;&#x7684;&#x589E;&#x52A0;&#x4F1A;&#x5BFC;&#x81F4;app&#x5BF9;multidex&#x4F9D;&#x8D56;&#x7684;&#x589E;&#x5F3A;&#x3002;
2&#x3001;&#x5927;&#x91CF;&#x7684;access&#x65B9;&#x6CD5;&#x4F1A;&#x4F7F;&#x5F97;&#x4EE3;&#x7801;&#x4F53;&#x79EF;&#x589E;&#x52A0;&#xFF0C;apk&#x6587;&#x4EF6;&#x4E5F;&#x4F1A;&#x53D8;&#x5927;&#xFF0C;&#x5728;&#x897F;&#x74DC;&#x89C6;&#x9891;&#x4E2D;&#x672A;&#x4F18;&#x5316;&#x524D;access&#x65B9;&#x6CD5;&#x589E;&#x52A0;&#x4E86;&#x51E0;&#x767E;k&#x7684;&#x5305;&#x5927;&#x5C0F;&#xFF1B;
3&#x3001;access&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x4F1A;&#x6709;&#x989D;&#x5916;&#x5F00;&#x9500;&#xFF08;&#x6BD4;&#x5982;&#x8981;&#x5206;&#x914D;&#x6808;&#x5E27;&#xFF09;&#xFF0C;&#x5BF9;&#x6027;&#x80FD;&#x4E5F;&#x6709;&#x4E00;&#x5B9A;&#x7684;&#x5F71;&#x54CD;&#x3002;

&#x89E3;&#x51B3;&#x529E;&#x6CD5;&#xFF1A;
1&#x3001;&#x9009;&#x62E9;&#x4F7F;&#x7528; ASM&#x5728;&#x7F16;&#x8BD1;&#x65F6;&#x81EA;&#x52A8;&#x5220;&#x9664; access&#x65B9;&#x6CD5;
2&#x3001;ReDex &#x4E5F;&#x63D0;&#x4F9B;&#x4E86; access-marking &#x8FD9;&#x4E2A;&#x529F;&#x80FD;&#x53BB;&#x9664;&#x4EE3;&#x7801;&#x4E2D;&#x7684; Access &#x65B9;&#x6CD5; &#x3002;
</code></pre>
<h3 id="&#x4EE3;&#x7801;&#x7F16;&#x5199;&#x65B9;&#x9762;&#x7684;&#x4F18;&#x5316;"><a name="&#x4EE3;&#x7801;&#x7F16;&#x5199;&#x65B9;&#x9762;&#x7684;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x4EE3;&#x7801;&#x7F16;&#x5199;&#x65B9;&#x9762;&#x7684;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.12. &#x4EE3;&#x7801;&#x7F16;&#x5199;&#x65B9;&#x9762;&#x7684;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x6BCF;&#x4E00;&#x4E2A;&#x679A;&#x4E3E;&#x503C;&#x90FD;&#x662F;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;, &#x5728;&#x4F7F;&#x7528;&#x5B83;&#x65F6;&#x4F1A;&#x589E;&#x52A0;&#x989D;&#x5916;&#x7684;&#x5185;&#x5B58;&#x6D88;&#x8017; &#xFF0C;&#x540C;&#x65F6;&#x4E5F;&#x4F1A;&#x589E;&#x52A0; DEX&#x6587;&#x4EF6;&#x7684;&#x5927;&#x5C0F; &#x3002;
&#x6240;&#x4EE5; android&#x5B98;&#x65B9;&#x6587;&#x6863;&#x5EFA;&#x8BAE;&#x5C3D;&#x91CF;&#x907F;&#x514D;&#x4F7F;&#x7528;&#x679A;&#x4E3E;&#x3002;
</code></pre>
<h3 id="r&#x6587;&#x4EF6;&#x5E38;&#x91CF;&#x5185;&#x8054;&#xFF0C;r&#x6587;&#x4EF6;&#x7626;&#x8EAB;--&#xFF08;&#x51CF;&#x5C11;&#x4F53;&#x79EF;&#x6709;&#x9650;&#xFF0C;&#x4E00;&#x4E24;m&#x5C31;&#x5F88;&#x5389;&#x5BB3;&#x4E86;&#xFF09;"><a name="r&#x6587;&#x4EF6;&#x5E38;&#x91CF;&#x5185;&#x8054;&#xFF0C;r&#x6587;&#x4EF6;&#x7626;&#x8EAB;--&#xFF08;&#x51CF;&#x5C11;&#x4F53;&#x79EF;&#x6709;&#x9650;&#xFF0C;&#x4E00;&#x4E24;m&#x5C31;&#x5F88;&#x5389;&#x5BB3;&#x4E86;&#xFF09;" class="anchor-navigation-ex-anchor" href="#r&#x6587;&#x4EF6;&#x5E38;&#x91CF;&#x5185;&#x8054;&#xFF0C;r&#x6587;&#x4EF6;&#x7626;&#x8EAB;--&#xFF08;&#x51CF;&#x5C11;&#x4F53;&#x79EF;&#x6709;&#x9650;&#xFF0C;&#x4E00;&#x4E24;m&#x5C31;&#x5F88;&#x5389;&#x5BB3;&#x4E86;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.13. R&#x6587;&#x4EF6;&#x5E38;&#x91CF;&#x5185;&#x8054;&#xFF0C;R&#x6587;&#x4EF6;&#x7626;&#x8EAB;  &#xFF08;&#x51CF;&#x5C11;&#x4F53;&#x79EF;&#x6709;&#x9650;&#xFF0C;&#x4E00;&#x4E24;M&#x5C31;&#x5F88;&#x5389;&#x5BB3;&#x4E86;&#xFF09;</h3>
<pre><code class="lang-text">&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5185;&#x8054; R Field &#x6765;&#x8FDB;&#x4E00;&#x6B65;&#x5BF9;&#x4EE3;&#x7801;&#x8FDB;&#x884C;&#x7626;&#x8EAB;&#xFF0C;
&#x6B64;&#x5916;&#x5B83;&#x4E5F;&#x89E3;&#x51B3;&#x4E86; R Field &#x8FC7;&#x591A;&#x5BFC;&#x81F4; MultiDex 65536 &#x7684;&#x95EE;&#x9898;&#x3002;

R.layout.activity_main &#x5B9E;&#x9645;&#x4E0A;&#x5BF9;&#x5E94;&#x7684;&#x662F;&#x4E00;&#x4E2A; int &#x578B;&#x7684;&#x5E38;&#x91CF;&#x503C;&#xFF0C;
&#x90A3;&#x4E48;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x7F16;&#x8BD1;&#x6253;&#x5305;&#x65F6;&#xFF0C;&#x5C06;&#x6240;&#x6709;&#x8FD9;&#x4E9B;&#x5BF9; R &#x7C7B;&#x7684;&#x5F15;&#x7528;&#x76F4;&#x63A5;&#x66FF;&#x6362;&#x6210;&#x5E38;&#x91CF;&#x503C;&#xFF0C;
&#x66FF;&#x6362;&#x4E00;&#x4E2A;&#x5C31;&#x4F1A;&#x51CF;&#x5C11;&#x4E00;&#x4E2A; R&#x6587;&#x4EF6;&#x4E2D;&#x7684;&#x5B57;&#x6BB5;&#xFF0C;R&#x6587;&#x4EF6;&#x4F53;&#x79EF;&#x5C31;&#x4F1A;&#x53D8;&#x5C0F;&#x3002;
&#x4F8B;&#x5982; setContentView(213196283) &#x6548;&#x679C;&#x4E5F;&#x662F;&#x4E00;&#x6837;&#x7684;&#x3002;

R.java  &#x7C7B;&#x91CC;&#x6709;2&#x79CD;&#x6570;&#x636E;&#x7C7B;&#x578B;&#xFF0C;&#x4E00;&#x79CD;&#x662F; static final int &#x7C7B;&#x578B;&#x7684;&#xFF0C;&#x8FD9;&#x79CD;&#x5E38;&#x91CF;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x662F;&#x4E0D;&#x4F1A;&#x4FEE;&#x6539;&#x7684;&#xFF0C;
&#x53E6;&#x4E00;&#x79CD;&#x662F; static final int[] &#x7C7B;&#x578B;&#x7684;&#xFF0C;&#x867D;&#x7136;&#x5B83;&#x4E5F;&#x662F;&#x5E38;&#x91CF;&#xFF0C;&#x4F46;&#x5B83;&#x662F;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;&#x7C7B;&#x578B;&#xFF0C;
&#x5E76;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x5220;&#x9664;&#x66FF;&#x6362;&#xFF0C;&#x6240;&#x4EE5;&#x6253;&#x5305;&#x8FDB; apk &#x7684; R &#x6587;&#x4EF6;&#x4E2D;&#xFF0C;
&#x7406;&#x8BBA;&#x4E0A;&#x9664;&#x4E86; static final int[] &#x7C7B;&#x578B;&#x7684;&#x5B57;&#x6BB5;&#xFF0C;&#x5176;&#x4ED6;&#x90FD;&#x53EF;&#x4EE5;&#x5168;&#x90E8;&#x5220;&#x9664;&#x6389;&#x3002;

&#x4E00;&#x4E2A;&#x5DE5;&#x7A0B;&#x5982;&#x679C;&#x6709;&#x591A;&#x4E2A; &#x6A21;&#x5757;&#xFF0C;&#x4F1A;&#x5BF9;&#x5E94;&#x591A;&#x4E2A;R&#x6587;&#x4EF6;&#xFF0C;
&#x5982;&#x679C;&#x5DE5;&#x7A0B;&#x6BD4;&#x8F83;&#x5927;&#xFF0C;R&#x6587;&#x4EF6;&#x4E5F;&#x4F1A;&#x6BD4;&#x8F83;&#x5927;&#xFF0C;&#x751A;&#x81F3;&#x4F1A;&#x6709;&#x51E0;&#x4E2A;M&#x3002;
R&#x6587;&#x4EF6;&#x7684; Field &#x8FC7;&#x591A;&#x65F6; &#x53EF;&#x80FD;&#x4F1A;&#x5BFC;&#x81F4; MultiDex 65536 &#x7684;&#x95EE;&#x9898;&#x3002;

&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x5730;&#x65B9;&#x7684;&#x4E00;&#x4E9B;&#x5DE5;&#x5177; &#x5FEB;&#x901F;&#x5B9E;&#x73B0;R&#x6587;&#x4EF6;&#x5185;&#x8054;&#x7626;&#x8EAB;&#xFF0C;&#x4F8B;&#x5982; &#x6296;&#x97F3;&#x7684; ByteX
https://github.com/bytedance/ByteX

ProGuard &#x4E5F;&#x4F1A;&#x5BF9;R&#x6587;&#x4EF6;&#x8FDB;&#x884C;&#x6DF7;&#x6DC6;&#xFF0C;
&#x4F46;&#x662F;&#x73B0;&#x5728;&#x5F88;&#x591A;&#x5E94;&#x7528;&#x6216;&#x8005;SDK&#x91CC;&#x90FD;&#x6709;&#x901A;&#x8FC7;&#x53CD;&#x5C04;&#x8C03;&#x7528;&#x6765;&#x83B7;&#x53D6;&#x8D44;&#x6E90;&#xFF0C;
&#x6BD4;&#x5982;&#x5927;&#x5BB6;&#x6700;&#x5E38;&#x7528;&#x7684;&#x7EDF;&#x8BA1;SDK&#x53CB;&#x76DF;&#x7EDF;&#x8BA1;&#x3001;&#x53CB;&#x76DF;&#x5206;&#x4EAB;&#x7B49;&#xFF0C;
&#x5C31;&#x8981;&#x6C42; R &#x6587;&#x4EF6;&#x4E0D;&#x80FD;&#x6DF7;&#x6DC6;&#x6389;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x62A5;&#x9519;&#xFF0C;
&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x5E38;&#x7528;&#x7684;&#x505A;&#x6CD5;&#x662F;&#x5F00;&#x542F;&#x6DF7;&#x6DC6;&#xFF0C;&#x4F46; keep &#x4F4F; R &#x6587;&#x4EF6;
</code></pre>
<h3 id="resconfigs-&#x53BB;&#x9664;&#x65E0;&#x7528;&#x8BED;&#x8A00;&#x8D44;&#x6E90;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;"><a name="resconfigs-&#x53BB;&#x9664;&#x65E0;&#x7528;&#x8BED;&#x8A00;&#x8D44;&#x6E90;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;" class="anchor-navigation-ex-anchor" href="#resconfigs-&#x53BB;&#x9664;&#x65E0;&#x7528;&#x8BED;&#x8A00;&#x8D44;&#x6E90;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.14. resConfigs &#x53BB;&#x9664;&#x65E0;&#x7528;&#x8BED;&#x8A00;&#x8D44;&#x6E90; &#xFF08;&#x5EFA;&#x8BAE;&#xFF09;</h3>
<pre><code class="lang-text">&#x4F8B;&#x5982;&#x4F7F;&#x7528;&#x4E86; AppCompat&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x505A;&#x4EFB;&#x4F55;&#x914D;&#x7F6E;&#x7684;&#x8BDD;&#xFF0C;&#x6700;&#x7EC8; APK &#x5305;&#x4E2D;&#x4F1A;&#x5305;&#x542B; AppCompat &#x4E2D;&#x6240;&#x6709;&#x5DF2;&#x7FFB;&#x8BD1;&#x8BED;&#x8A00;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;
&#x65E0;&#x8BBA;&#x5E94;&#x7528;&#x7684;&#x5176;&#x4F59;&#x90E8;&#x5206;&#x662F;&#x5426;&#x7FFB;&#x8BD1;&#x4E3A;&#x540C;&#x4E00;&#x8BED;&#x8A00;&#x3002;
&#x5BF9;&#x6B64;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5; &#x901A;&#x8FC7; resConfig &#x6765;&#x914D;&#x7F6E;&#x4F7F;&#x7528;&#x54EA;&#x4E9B;&#x8BED;&#x8A00;&#xFF0C;&#x4ECE;&#x800C;&#x8BA9;&#x6784;&#x5EFA;&#x5DE5;&#x5177;&#x79FB;&#x9664;&#x6307;&#x5B9A;&#x8BED;&#x8A00;&#x4E4B;&#x5916;&#x7684;&#x6240;&#x6709;&#x8D44;&#x6E90;&#x3002;

defaultConfig {
    resConfigs &quot;en&quot;
}
</code></pre>
<h3 id="&#x8D44;&#x6E90;&#x5728;&#x7EBF;&#x5316;"><a name="&#x8D44;&#x6E90;&#x5728;&#x7EBF;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x8D44;&#x6E90;&#x5728;&#x7EBF;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.15. &#x8D44;&#x6E90;&#x5728;&#x7EBF;&#x5316;</h3>
<pre><code class="lang-text">&#x4E00;&#x4E9B;&#x56FE;&#x7247;&#x7B49;&#x8D44;&#x6E90; &#x53EF;&#x4EE5;&#x653E;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x7ED3;&#x5408;&#x9884;&#x52A0;&#x8F7D;&#x6280;&#x672F;&#xFF0C;&#x53EF;&#x4EE5;&#x51CF;&#x5C11;apk&#x6253;&#x5305;&#x5927;&#x5C0F;&#x3002;
</code></pre>
<h3 id="&#x7EDF;&#x4E00;&#x5E94;&#x7528;&#x98CE;&#x683C;&#xFF0C;&#x51CF;&#x5C11;-xml-&#x914D;&#x7F6E;&#x6587;&#x4EF6;-&#x548C;&#x56FE;&#x7247;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;"><a name="&#x7EDF;&#x4E00;&#x5E94;&#x7528;&#x98CE;&#x683C;&#xFF0C;&#x51CF;&#x5C11;-xml-&#x914D;&#x7F6E;&#x6587;&#x4EF6;-&#x548C;&#x56FE;&#x7247;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x7EDF;&#x4E00;&#x5E94;&#x7528;&#x98CE;&#x683C;&#xFF0C;&#x51CF;&#x5C11;-xml-&#x914D;&#x7F6E;&#x6587;&#x4EF6;-&#x548C;&#x56FE;&#x7247;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.16. &#x7EDF;&#x4E00;&#x5E94;&#x7528;&#x98CE;&#x683C;&#xFF0C;&#x51CF;&#x5C11; xml &#x914D;&#x7F6E;&#x6587;&#x4EF6; &#x548C;&#x56FE;&#x7247; &#xFF08;&#x5EFA;&#x8BAE;&#xFF09;</h3>
<pre><code class="lang-text">&#x5982;&#x8BBE;&#x5B9A;&#x7EDF;&#x4E00;&#x7684; &#x5B57;&#x4F53;&#x3001;&#x5C3A;&#x5BF8;&#x3001;&#x989C;&#x8272;&#x548C;&#x6309;&#x94AE;&#x6309;&#x538B;&#x6548;&#x679C;&#x3001;&#x5206;&#x5272;&#x7EBF; shape&#x3001;selector &#x80CC;&#x666F;&#x7B49;&#x3002;
</code></pre>
<h3 id="&#x526A;&#x88C1;-so-&#x5E93;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;"><a name="&#x526A;&#x88C1;-so-&#x5E93;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x526A;&#x88C1;-so-&#x5E93;-&#xFF08;&#x5EFA;&#x8BAE;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.17. &#x526A;&#x88C1; so &#x5E93; &#xFF08;&#x5EFA;&#x8BAE;&#xFF09;</h3>
<pre><code class="lang-text">&#x5982;&#x679C;&#x7528;&#x5230;&#x7B2C;&#x4E09;&#x65B9;&#x7684;&#x5E93;&#x7684;&#x67D0;&#x4E2A;&#x529F;&#x80FD;&#xFF0C;&#x53EF;&#x4EE5;&#x628A;&#x4E0D;&#x9700;&#x8981;&#x7684;&#x90E8;&#x5206;&#x526A;&#x88C1;&#x6389;&#xFF0C;
&#x51CF;&#x5C11; so &#x7684;&#x4F53;&#x79EF;&#xFF0C;&#x4F8B;&#x5982; ffmpeg &#x4E2D; &#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x9009;&#x62E9;&#x914D;&#x7F6E;&#xFF0C;&#x7F16;&#x8BD1;&#x51FA;&#x81EA;&#x5DF1;&#x60F3;&#x8981;&#x529F;&#x80FD;&#x7684;so &#x5373;&#x53EF;&#x3002;

&#x8FC7;&#x6EE4;&#x6389;&#x4E0D;&#x5E38;&#x7528; CPU &#x5E73;&#x53F0;&#x7684; so &#x3002; 
abiFilters &quot;armeabi&quot; &#xFF0C;&#x201C;xxx&#x201D;
</code></pre>
<h3 id="xz-utils--&#x538B;&#x7F29;-so"><a name="xz-utils--&#x538B;&#x7F29;-so" class="anchor-navigation-ex-anchor" href="#xz-utils--&#x538B;&#x7F29;-so"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.18. XZ Utils  &#x538B;&#x7F29; so</h3>
<pre><code class="lang-text">Native Library &#x540C; Dex &#x4E00;&#x6837;,&#x4E5F;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; XZ Utils &#x8FDB;&#x884C;&#x538B;&#x7F29;&#xFF0C;
&#x5BF9;&#x4E8E; Native Library &#x7684;&#x538B;&#x7F29;&#xFF0C;&#x6211;&#x4EEC; &#x53EA;&#x9700;&#x8981;&#x53BB;&#x52A0;&#x8F7D;&#x542F;&#x52A8;&#x8FC7;&#x7A0B;&#x76F8;&#x5173;&#x7684; Library&#xFF0C;
&#x800C;&#x5176;&#x5B83;&#x7684;&#x90FD;&#x53EF;&#x4EE5;&#x5728;&#x5E94;&#x7528;&#x9996;&#x6B21;&#x542F;&#x52A8;&#x65F6;&#x8FDB;&#x884C;&#x89E3;&#x538B;&#x3002;
</code></pre>
<h3 id="so-&#x52A8;&#x6001;&#x4E0B;&#x8F7D;"><a name="so-&#x52A8;&#x6001;&#x4E0B;&#x8F7D;" class="anchor-navigation-ex-anchor" href="#so-&#x52A8;&#x6001;&#x4E0B;&#x8F7D;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.19. So &#x52A8;&#x6001;&#x4E0B;&#x8F7D;</h3>
<pre><code class="lang-text">&#x53EF;&#x4EE5;&#x53C2;&#x8003; &#x817E;&#x8BAF;&#x7684;&#x6280;&#x672F;&#x6587;&#x7AE0; &#x201C;&#x52A8;&#x6001;&#x4E0B;&#x53D1; so &#x5E93;&#x5728; Android APK &#x5B89;&#x88C5;&#x5305;&#x7626;&#x8EAB;&#x65B9;&#x9762;&#x7684;&#x5E94;&#x7528;&#x201D;
https://mp.weixin.qq.com/s/X58fK02imnNkvUMFt23OAg
</code></pre>
<h3 id="&#x63D2;&#x4EF6;&#x5316;&#x601D;&#x8DEF;"><a name="&#x63D2;&#x4EF6;&#x5316;&#x601D;&#x8DEF;" class="anchor-navigation-ex-anchor" href="#&#x63D2;&#x4EF6;&#x5316;&#x601D;&#x8DEF;"><i class="fa fa-link" aria-hidden="true"></i></a>10.3.20. &#x63D2;&#x4EF6;&#x5316;&#x601D;&#x8DEF;</h3>
<pre><code class="lang-text">&#x5982;&#x679C;&#x6211;&#x4EEC; App &#x5F53;&#x4E2D;&#x7684;&#x6BCF;&#x4E00;&#x4E2A;&#x529F;&#x80FD;&#x90FD;&#x662F;&#x4E00;&#x4E2A;&#x63D2;&#x4EF6;&#xFF0C;&#x5E76;&#x4E14;&#x90FD;&#x662F;&#x53EF;&#x4EE5;&#x4ECE;&#x670D;&#x52A1;&#x5668;&#x4E0B;&#x53D1;&#x4E0B;&#x6765;&#x7684;&#xFF0C;&#x90A3; App &#x7684;&#x5305;&#x4F53;&#x79EF;&#x80AF;&#x5B9A;&#x4F1A;&#x5C0F;&#x5F88;&#x591A;&#x3002;
</code></pre>
<h1 id="&#x7535;&#x6C60;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><a name="&#x7535;&#x6C60;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x5B8C;&#x6210;" class="anchor-navigation-ex-anchor" href="#&#x7535;&#x6C60;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><i class="fa fa-link" aria-hidden="true"></i></a>11. &#x7535;&#x6C60;&#x8017;&#x7535;&#x4F18;&#x5316; (&#x5B8C;&#x6210;)</h1>
<pre><code class="lang-text">&#x624B;&#x673A;&#x8017;&#x7535;&#x662F;&#x901A;&#x8FC7;&#x4F7F;&#x7528;&#x76F8;&#x5E94;&#x7684;&#x786C;&#x4EF6;&#x6A21;&#x5757;&#x6765;&#x6D88;&#x8017;&#x7535;&#x80FD;&#x3002;
CPU&#x3001;&#x5C4F;&#x5E55;&#x3001;WIFI&#x3001;&#x6570;&#x636E;&#x7F51;&#x7EDC;&#x3001;GPS&#x3001;&#x97F3;&#x89C6;&#x9891;&#x901A;&#x8BDD;&#x5728;&#x65E5;&#x5E38;&#x8017;&#x7535;&#x91CF;&#x4E2D;&#x5360;&#x6BD4;&#x6700;&#x5927;&#x3002;
</code></pre>
<h2 id="android&#x7CFB;&#x7EDF;&#x505A;&#x7684;-&#x7701;&#x7535;&#x4F18;&#x5316;"><a name="android&#x7CFB;&#x7EDF;&#x505A;&#x7684;-&#x7701;&#x7535;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#android&#x7CFB;&#x7EDF;&#x505A;&#x7684;-&#x7701;&#x7535;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>11.1. Android&#x7CFB;&#x7EDF;&#x505A;&#x7684; &#x7701;&#x7535;&#x4F18;&#x5316;</h2>
<pre><code class="lang-text">1&#x3001;Android 4.4 &#x65B0;&#x589E;&#x201C;&#x786C;&#x4EF6;&#x4F20;&#x611F;&#x5668;&#x6279;&#x5904;&#x7406;&#x201D;&#x652F;&#x6301;
&#x201C;&#x786C;&#x4EF6;&#x4F20;&#x611F;&#x5668;&#x6279;&#x5904;&#x7406;&#x201D;(&#x9700;&#x8981;&#x786C;&#x4EF6;&#x652F;&#x6301;)&#x53EF;&#x4EE5;&#x663E;&#x8457;&#x964D;&#x4F4E;&#x4F20;&#x611F;&#x5668;&#x6301;&#x7EED;&#x6D3B;&#x52A8;&#x6240;&#x6D88;&#x8017;&#x7684;&#x7535;&#x91CF;&#x3002;
&#x56E0;&#x4E3A;&#x6211;&#x4EEC;&#x6709;&#x65F6;&#x5E76;&#x4E0D;&#x9700;&#x8981;&#x975E;&#x5E38;&#x5FEB;&#x7684;&#x6570;&#x636E;&#x66F4;&#x65B0;&#x9891;&#x7387;&#xFF0C;&#x6BD4;&#x5982;GPS&#x5B9A;&#x4F4D;&#x4E0D;&#x9700;&#x8981;&#x4E00;&#x79D2;&#x5341;&#x51E0;&#x6B21;&#x4F4D;&#x7F6E;&#x66F4;&#x65B0;&#x3002;  
&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x901A;&#x8FC7; API &#x53EF;&#x4EE5;&#x6307;&#x5B9A;&#x7CFB;&#x7EDF;&#x5411;&#x5E94;&#x7528;&#x4F20;&#x8F93;&#x6279;&#x91CF;&#x4F20;&#x611F;&#x5668;&#x4E8B;&#x4EF6;&#x7684;&#x9891;&#x7387;&#x3002;
&#x7CFB;&#x7EDF;&#x4F1A;&#x5C06;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x5185;&#x53D1;&#x751F;&#x7684;&#x6240;&#x6709;&#x4E8B;&#x4EF6;&#x4FDD;&#x5B58;&#x8D77;&#x6765;&#xFF0C;&#x7136;&#x540E;&#x4E00;&#x6B21;&#x6027;&#x5C06;&#x5B83;&#x4EEC;&#x4F20;&#x8F93;&#x5230;&#x5E94;&#x7528;&#xFF0C;
&#x800C;&#x4E0D;&#x662F;&#x5728;&#x6BCF;&#x4E2A;&#x4E8B;&#x4EF6;&#x53D1;&#x751F;&#x65F6;&#x5C06;&#x5176;&#x4F20;&#x8F93;&#x5230;&#x4F60;&#x7684;&#x5E94;&#x7528;&#x3002;
&#x8FD9;&#x6837;&#x5904;&#x7406;&#x53EA;&#x964D;&#x4F4E;&#x4E86;&#x4F20;&#x8F93;&#x7684;&#x9891;&#x7387;&#x5E76;&#x4E0D;&#x4F1A;&#x51CF;&#x5C11;&#x6B21;&#x6570;&#x3002;

2&#x3001;Android4.4 &#x65B0;&#x589E; AlarmManager &#x201C;&#x5BF9;&#x9F50;&#x5524;&#x9192;&#x201D;API&#x652F;&#x6301;&#xFF0C;
&#x7B80;&#x5355;&#x7684;&#x8BF4;&#x5C31;&#x662F;&#x6BCF;&#x9694;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x540E;&#x53F0;&#x7A0B;&#x5E8F;&#x5524;&#x9192;&#x4E00;&#x6B21;&#xFF0C;&#x6BD4;&#x5982;&#x4F60;&#x7684;QQ&#x3001;&#x5FAE;&#x4FE1;&#x5728;&#x540E;&#x53F0;&#x8FD0;&#x884C;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x6CA1;&#x6709;&#x5F00;&#x542F;&#x667A;&#x80FD;&#x5524;&#x9192;&#xFF0C;
&#x90A3;&#x4E48;QQ&#x6709;&#x6D88;&#x606F;&#x4E86;&#x540E;&#x53F0;&#x9A6C;&#x4E0A;&#x5524;&#x9192;&#xFF0C;&#x5FAE;&#x4FE1;&#x6709;&#x6D88;&#x606F;&#x4E86;&#x4E5F;&#x9A6C;&#x4E0A;&#x5524;&#x9192;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x4F1A;&#x975E;&#x5E38;&#x8017;&#x7535;&#x3002;
&#x5BF9;&#x9F50;&#x5524;&#x9192;&#x5C31;&#x662F;&#x6BCF;&#x9694;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x5524;&#x9192;&#x4E00;&#x6B21;&#xFF0C;&#x80FD;&#x7701;&#x7535;&#x4E0D;&#x5C11;&#x3002;

3&#x3001;Android 5.0 &#xFF0C;&#x52A0;&#x5165;&#x4E86; Volta &#x9879;&#x76EE; &#xFF0C;
&#x8FD9;&#x4E2A;&#x9879;&#x76EE;&#x53EF;&#x4EE5;&#x5BF9;&#x7535;&#x6C60;&#x8FDB;&#x884C;&#x66F4;&#x7CBE;&#x7EC6;&#x7684;&#x7BA1;&#x7406;&#xFF0C;&#x80FD;&#x591F;&#x5927;&#x5927;&#x964D;&#x4F4E;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5BF9;&#x4E8E;&#x7535;&#x6C60;&#x7535;&#x91CF;&#x7684;&#x6301;&#x7EED;&#x6D88;&#x8017;&#x3002;

4&#x3001;Android5.0 &#x8FDB;&#x5165; &#x4EFB;&#x52A1;&#x8C03;&#x5EA6;&#x673A;&#x5236; JobScheduler &#xFF0C;&#x7701;&#x7535;&#x539F;&#x7406;&#x7C7B;&#x4F3C;&#x4E8E; Android4.4&#x52A0;&#x7684; &#x95F9;&#x949F;&#x5BF9;&#x9F50;&#x5524;&#x9192;&#x3002;

5&#x3001;Android6.0 &#x52A0;&#x5165; Doze &#x4F11;&#x7720;&#x4F4E;&#x529F;&#x8017;&#x6A21;&#x5F0F; &#x3002;
&#x5728; Doze &#x6A21;&#x5F0F;&#x4E0B;&#xFF0C;&#x7CFB;&#x7EDF;&#x901A;&#x8FC7;&#x9650;&#x5236;app&#x8BBF;&#x95EE;&#x7F51;&#x7EDC;&#x548C;&#x5176;&#x5BF9;CPU&#x4F7F;&#x7528;&#x6765;&#x8FBE;&#x5230;&#x7701;&#x7535;&#x7684;&#x76EE;&#x7684;&#xFF0C;
app&#x7684;&#x7F51;&#x7EDC;&#x8BBF;&#x95EE;&#x529F;&#x80FD;&#x4F1A;&#x88AB;&#x7981;&#x7528;&#xFF0C;&#x540C;&#x65F6;&#x5EF6;&#x65F6;&#x6267;&#x884C;&#x4F5C;&#x4E1A;&#xFF0C;&#x5F02;&#x6B65;&#x4EFB;&#x52A1;&#x53CA;&#x6807;&#x51C6;&#x95F9;&#x949F;&#x4E8B;&#x4EF6;&#x3002;
&#x4E3A;&#x4E86;&#x4FDD;&#x8BC1;app&#x7684;&#x5DE5;&#x4F5C;&#xFF0C;&#x7CFB;&#x7EDF;&#x4F1A;&#x5468;&#x671F;&#x5730;&#x9000;&#x51FA;Doze&#x6A21;&#x5F0F;&#xFF0C;&#x4EE5;&#x4FDD;&#x8BC1;app&#x5B8C;&#x6210;&#x90A3;&#x4E9B;&#x88AB;&#x5EF6;&#x65F6;&#x7684;&#x4EFB;&#x52A1;&#x3002;

6&#x3001;Android6.0 &#x52A0;&#x5165; App Standby&#xFF08; app&#x5F85;&#x547D;&#x6A21;&#x5F0F;&#xFF09;&#x3002;
&#x8FD9;&#x4E2A;&#x6982;&#x5FF5;&#x5219;&#x662F;&#x9488;&#x5BF9;&#x4E8E;&#x5E94;&#x7528;&#x7684;&#xFF0C;&#x5F53;App&#x8FDB;&#x5165;AppStandby&#x72B6;&#x6001;&#x540E;&#xFF0C;&#x4E5F;&#x4F1A;&#x53D7;&#x5230;&#x7F51;&#x7EDC;&#x7B49;&#x72B6;&#x6001;&#x7684;&#x9650;&#x5236;&#x3002;
&#x6B64;&#x5904;&#x4E0D;&#x5217;&#x51FA;&#x5177;&#x4F53;&#x89E6;&#x53D1;&#x548C;&#x9000;&#x51FA;&#x6761;&#x4EF6; &#x3002;

7&#x3001;Android7.0 &#x5220;&#x9664;&#x4E86;&#x4E09;&#x4E2A;&#x9690;&#x5F0F;&#x5E7F;&#x64AD;&#xFF0C;&#x51CF;&#x5C11;&#x65E0;&#x7528;&#x529F;&#x8017;&#x3002;

8&#x3001;Android8.0 &#x589E;&#x52A0; &#x201C;&#x540E;&#x53F0;&#x6267;&#x884C;&#x9650;&#x5236;&#x201D;&#x3002;
&#x6BCF;&#x6B21;&#x5728;&#x540E;&#x53F0;&#x8FD0;&#x884C;&#x65F6;&#xFF0C;&#x5E94;&#x7528;&#x90FD;&#x4F1A;&#x6D88;&#x8017;&#x4E00;&#x90E8;&#x5206;&#x6709;&#x9650;&#x7684;&#x8BBE;&#x5907;&#x8D44;&#x6E90;&#xFF0C;&#x4F8B;&#x5982;&#x5185;&#x5B58;&#x548C;CPU&#x3002;
&#x540E;&#x53F0;&#x6267;&#x884C;&#x9650;&#x5236;&#x5305;&#x62EC; &#x540E;&#x53F0;&#x670D;&#x52A1;&#x9650;&#x5236;&#x548C; &#x5E7F;&#x64AD;&#x9650;&#x5236;&#x3002;

9&#x3001;Android8.0 &#x589E;&#x52A0; &#x201C;&#x540E;&#x53F0;&#x4F4D;&#x7F6E;&#x9650;&#x5236;&#x201D;&#x3002;
</code></pre>
<h2 id="&#x8017;&#x7535;&#x5206;&#x6790;&#x5DE5;&#x5177;"><a name="&#x8017;&#x7535;&#x5206;&#x6790;&#x5DE5;&#x5177;" class="anchor-navigation-ex-anchor" href="#&#x8017;&#x7535;&#x5206;&#x6790;&#x5DE5;&#x5177;"><i class="fa fa-link" aria-hidden="true"></i></a>11.2. &#x8017;&#x7535;&#x5206;&#x6790;&#x5DE5;&#x5177;</h2>
<h3 id="energy-profiler"><a name="energy-profiler" class="anchor-navigation-ex-anchor" href="#energy-profiler"><i class="fa fa-link" aria-hidden="true"></i></a>11.2.1. Energy Profiler</h3>
<pre><code class="lang-text">&#x8BBE;&#x5907;&#x7CFB;&#x7EDF;&#x5728; Android 8.0 &#x4EE5;&#x4E0A;&#x7684;&#x7CFB;&#x7EDF; &#x4F7F;&#x7528; Energy Profiler
Androidstudio &#x4E2D; view -&gt; Tool Windows --&gt; Profiler
&#x5176;&#x4E2D;&#x4F1A;&#x5206;&#x680F;&#x663E;&#x793A; CPU &#x3001; MEMORY &#x3001;NETWORK  &#x3001;ENERGY
&#x5176;&#x4E2D; ENERGY &#x5C31;&#x662F;&#x7535;&#x91CF;&#x7684;&#x6D88;&#x8017;&#x60C5;&#x51B5;&#x3002;
</code></pre>
<h3 id="battery-historian-&#x7535;&#x91CF;&#x5206;&#x6790;&#x5DE5;&#x5177;"><a name="battery-historian-&#x7535;&#x91CF;&#x5206;&#x6790;&#x5DE5;&#x5177;" class="anchor-navigation-ex-anchor" href="#battery-historian-&#x7535;&#x91CF;&#x5206;&#x6790;&#x5DE5;&#x5177;"><i class="fa fa-link" aria-hidden="true"></i></a>11.2.2. battery-historian &#x7535;&#x91CF;&#x5206;&#x6790;&#x5DE5;&#x5177;</h3>
<p>android 8.0 &#x4EE5;&#x4E0B;&#x4F7F;&#x7528; battery-historian </p>
<pre><code class="lang-text">https://github.com/google/battery-historian 
&#x5728;&#x672C;&#x5730;&#x642D;&#x5EFA; battery-historian &#x5DE5;&#x5177;&#x6709;&#x4E24;&#x79CD;&#x65B9;&#x6CD5;
&#x7B2C;&#x4E00;&#x79CD;&#x662F;&#x7528; dock &#x65B9;&#x5F0F;&#xFF0C;&#x7B2C;&#x4E8C;&#x79CD;&#x662F; &#x7F16;&#x8BD1;&#x7F16;&#x7801;&#x65B9;&#x5F0F;&#x3002;
&#x5177;&#x4F53;&#x6B65;&#x9AA4;&#x53C2;&#x8003;&#x4E86; https://blog.csdn.net/cui130/article/details/103934363 
&#x4F46;&#x662F;&#x53EF;&#x80FD;&#x662F;&#x56E0;&#x4E3A;&#x7F51;&#x7EDC;&#x7684;&#x95EE;&#x9898;
&#x8D70;&#x5230; go get -d -u github.com/google/battery-historian/...  &#x65E0;&#x6CD5;&#x4E0B;&#x8F7D;&#x4E86;...
go get -d -u github.com/google/battery-historian/...
go get github.com/google/battery-historian/...: module github.com/google/battery-historian: Get &quot;https://proxy.golang.org/github.com/google/battery-historian/@v/list&quot;: dial tcp 172.217.161.145:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

&#x4EE5;&#x540E;&#x6709;&#x7A7A;&#x518D;&#x7528;&#x7F16;&#x8BD1;&#x6E90;&#x7801;&#x7684;&#x65B9;&#x5F0F;&#x53BB;&#x5F04;&#x4E86;&#xFF0C;
&#x6682;&#x65F6;&#x5148;&#x7528;&#x4E00;&#x4E2A;&#x5728;&#x7EBF;&#x7684;&#x670D;&#x52A1;
https://bathist.ef.lc/

// &#x83B7;&#x53D6;&#x624B;&#x673A;&#x7535;&#x91CF;&#x62A5;&#x544A;&#x4FE1;&#x606F;
adb shell dumpsys batterystats --enable full-wake-history //&#x5141;&#x8BB8;&#x8BB0;&#x5F55;&#x7535;&#x6C60;&#x65E5;&#x5FD7;
adb shell dumpsys batterystats --reset   // &#x6E05;&#x7A7A;&#x65E5;&#x5FD7;

adb bugreport bugreport.zip    //  7.0 &#x548C;&#x66F4;&#x9AD8;&#x7248;&#x672C;&#x7684;&#x5F00;&#x53D1;&#x8BBE;&#x5907;&#x4E2D;&#x83B7;&#x5F97; bug &#x62A5;&#x544A;
adb bugreport &gt; bugreport.txt  // 6.0&#x6216;&#x66F4;&#x4F4E;&#x7248;&#x672C;&#x7684;&#x8BBE;&#x5907;

&#x5C06;&#x5BFC;&#x51FA;&#x7684;&#x6587;&#x4EF6;&#x4E0A;&#x4F20;&#x5230; &#x5DE5;&#x5177;&#x91CC;&#x8FDB;&#x884C;&#x5206;&#x6790; https://bathist.ef.lc/
</code></pre>
<h2 id="&#x68C0;&#x67E5;&#x7EDF;&#x8BA1;-&#x5355;&#x4E2A;app&#x7684;&#x8017;&#x7535;&#x60C5;&#x51B5;"><a name="&#x68C0;&#x67E5;&#x7EDF;&#x8BA1;-&#x5355;&#x4E2A;app&#x7684;&#x8017;&#x7535;&#x60C5;&#x51B5;" class="anchor-navigation-ex-anchor" href="#&#x68C0;&#x67E5;&#x7EDF;&#x8BA1;-&#x5355;&#x4E2A;app&#x7684;&#x8017;&#x7535;&#x60C5;&#x51B5;"><i class="fa fa-link" aria-hidden="true"></i></a>11.3. &#x68C0;&#x67E5;&#x7EDF;&#x8BA1; &#x5355;&#x4E2A;App&#x7684;&#x8017;&#x7535;&#x60C5;&#x51B5;</h2>
<pre><code class="lang-text">battery-historian &#x3001;Energy Profiler &#x4E2D;&#x5747;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x5305;&#x540D; &#x9009;&#x62E9;&#x6307;&#x5B9A;&#x7684;APP&#x8FDB;&#x884C;&#x5206;&#x6790;&#x3002;
</code></pre>
<h2 id="&#x7701;&#x7535;&#x4F18;&#x5316;&#x65B9;&#x6848;"><a name="&#x7701;&#x7535;&#x4F18;&#x5316;&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#&#x7701;&#x7535;&#x4F18;&#x5316;&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>11.4. &#x7701;&#x7535;&#x4F18;&#x5316;&#x65B9;&#x6848;</h2>
<h3 id="&#x4F18;&#x5316;&#x540E;&#x53F0;&#x8017;&#x7535;"><a name="&#x4F18;&#x5316;&#x540E;&#x53F0;&#x8017;&#x7535;" class="anchor-navigation-ex-anchor" href="#&#x4F18;&#x5316;&#x540E;&#x53F0;&#x8017;&#x7535;"><i class="fa fa-link" aria-hidden="true"></i></a>11.4.1. &#x4F18;&#x5316;&#x540E;&#x53F0;&#x8017;&#x7535;</h3>
<pre><code class="lang-text">&#x907F;&#x514D;&#x540E;&#x53F0;&#x957F;&#x65F6;&#x95F4;&#x83B7;&#x53D6; WakeLock&#x3001;WIFI &#x548C;&#x84DD;&#x7259;&#x7684;&#x626B;&#x63CF;&#x7B49;&#x3002;
WakeLock &#x662F;android&#x7CFB;&#x7EDF;&#x4E2D;&#x4E00;&#x79CD;&#x9501;&#x7684;&#x673A;&#x5236;&#xFF0C;&#x53EA;&#x8981;&#x6709;&#x8FDB;&#x7A0B;&#x6301;&#x6709;&#x8FD9;&#x4E2A;&#x9501;&#xFF0C;&#x7CFB;&#x7EDF;&#x5C31;&#x65E0;&#x6CD5;&#x8FDB;&#x5165;&#x4F11;&#x7720;&#x72B6;&#x6001;&#x3002;
WakeLock &#x8981;&#x8BB0;&#x5F97;&#x91CA;&#x653E;&#x3002;
</code></pre>
<h3 id="&#x5236;&#x5B9A;-&#x7B26;&#x5408;&#x7CFB;&#x7EDF;&#x7684;&#x8017;&#x7535;&#x89C4;&#x5219;"><a name="&#x5236;&#x5B9A;-&#x7B26;&#x5408;&#x7CFB;&#x7EDF;&#x7684;&#x8017;&#x7535;&#x89C4;&#x5219;" class="anchor-navigation-ex-anchor" href="#&#x5236;&#x5B9A;-&#x7B26;&#x5408;&#x7CFB;&#x7EDF;&#x7684;&#x8017;&#x7535;&#x89C4;&#x5219;"><i class="fa fa-link" aria-hidden="true"></i></a>11.4.2. &#x5236;&#x5B9A; &#x7B26;&#x5408;&#x7CFB;&#x7EDF;&#x7684;&#x8017;&#x7535;&#x89C4;&#x5219;</h3>
<pre><code class="lang-text">1&#x3001;Alarm Manager wakeup &#x4E0D;&#x80FD;&#x5524;&#x9192;&#x8FC7;&#x591A;&#xFF1A;
&#x5F53;&#x624B;&#x673A;&#x4E0D;&#x5728;&#x5145;&#x7535;&#x72B6;&#x6001;&#xFF0C; wakeup &#x5524;&#x9192;&#x6B21;&#x6570; &#x6BCF;&#x5C0F;&#x65F6;&#x4E0D;&#x80FD;&#x5927;&#x4E8E; 10 &#x6B21;&#x3002;

2&#x3001;&#x4E0D;&#x80FD;&#x9891;&#x7E41;&#x4F7F;&#x7528;&#x5C40;&#x90E8;&#x5524;&#x9192;&#x9501;&#xFF0C;
&#x5F53;&#x624B;&#x673A;&#x4E0D;&#x5728;&#x5145;&#x7535;&#x72B6;&#x6001;&#xFF0C;partial wake lock &#x6301;&#x6709;&#x4E0D;&#x80FD;&#x8D85;&#x8FC7;1&#x5C0F;&#x65F6;&#x3002;

3&#x3001;&#x540E;&#x53F0;&#x7F51;&#x7EDC;&#x4F7F;&#x7528;&#x91CF;&#x4E0D;&#x80FD;&#x8FC7;&#x9AD8;
&#x5F53;&#x624B;&#x673A;&#x4E0D;&#x5728;&#x5145;&#x7535;&#x72B6;&#x6001;&#x800C;&#x4E14;&#x5E94;&#x7528;&#x5728;&#x540E;&#x53F0;&#xFF0C;&#x6BCF;&#x5C0F;&#x65F6;&#x7F51;&#x7EDC;&#x4F7F;&#x7528;&#x91CF;&#x4E0D;&#x8981;&#x8D85;&#x8FC7; 50MB&#x3002;

4&#x3001;&#x3001;&#x540E;&#x53F0; WiFi scans &#x4E0D;&#x80FD;&#x8FC7;&#x591A;
&#x5F53;&#x624B;&#x673A;&#x4E0D;&#x5728;&#x5145;&#x7535;&#x72B6;&#x6001;&#x800C;&#x4E14;&#x5E94;&#x7528;&#x5728;&#x540E;&#x53F0;&#xFF0C;&#x6BCF;&#x5C0F;&#x65F6; WiFi scans &#x4E0D;&#x80FD; &#x5927;&#x4E8E;4&#x6B21;&#x3002;
</code></pre>
<h3 id="cpu-&#x65F6;&#x95F4;&#x7247;&#x4F18;&#x5316;"><a name="cpu-&#x65F6;&#x95F4;&#x7247;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#cpu-&#x65F6;&#x95F4;&#x7247;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>11.4.3. CPU &#x65F6;&#x95F4;&#x7247;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">Android &#x624B;&#x673A;&#x5305;&#x62EC; AP &#x548C; BP &#x4E24;&#x4E2A; CPU&#x3002;
AP &#x5373; Application Processor&#xFF0C;&#x6240;&#x6709;&#x7684;&#x7528;&#x6237;&#x754C;&#x9762;&#x4EE5;&#x53CA; App &#x90FD;&#x662F;&#x8FD0;&#x884C;&#x5728; AP &#x4E0A;&#x7684;&#x3002;
BP &#x5373; Baseband Processor&#xFF0C;&#x624B;&#x673A;&#x5C04;&#x9891;&#x90FD;&#x662F;&#x8FD0;&#x884C;&#x5728;&#x8FD9;&#x4E2A; CPU &#x4E0A;&#x7684;&#x3002;
&#x6211;&#x4EEC;&#x6240;&#x8BF4;&#x7684;&#x8017;&#x7535;&#xFF0C;PowerProfile &#x6587;&#x4EF6;&#x91CC;&#x9762;&#x7684; CPU&#xFF0C;&#x6307;&#x7684;&#x662F; AP&#x3002;

CPU &#x8017;&#x7535;&#x901A;&#x5E38;&#x6709;&#x4E24;&#x79CD;&#x60C5;&#x51B5;&#xFF1A;
1&#x3001;&#x957F;&#x671F;&#x9891;&#x7E41;&#x5524;&#x9192;&#x3002;
&#x539F;&#x672C;&#x53EF;&#x4EE5;&#x4EC5;&#x4EC5;&#x5728; BP &#x4E0A;&#x8FD0;&#x884C;&#xFF0C; &#x4F46;&#x662F;&#x56E0;&#x4E3A;&#x5524;&#x9192;&#xFF0C;AP &#x5C31;&#x4F1A;&#x8FD0;&#x4F5C; &#x589E;&#x52A0;&#x8017;&#x7535;&#x91CF;&#x3002;

2&#x3001;CPU &#x957F;&#x671F;&#x9AD8;&#x8D1F;&#x8377;&#x3002;
&#x4F8B;&#x5982; App &#x9000;&#x5230;&#x540E;&#x53F0;&#x7684;&#x65F6;&#x5019;&#x6CA1;&#x6709;&#x505C;&#x6B62;&#x52A8;&#x753B;&#xFF0C;&#x6216;&#x8005;&#x7A0B;&#x5E8F;&#x6709;&#x4E0D;&#x9000;&#x51FA;&#x7684;&#x6B7B;&#x5FAA;&#x73AF;&#x7B49;&#x7B49;&#xFF0C;&#x5BFC;&#x81F4; CPU &#x6EE1;&#x9891;&#x3001;&#x6EE1;&#x6838;&#x5730;&#x8DD1;&#x3002;

3&#x3001;&#x4E00;&#x4E9B;&#x8BA1;&#x7B97;&#x4E0D;&#x591F;&#x4F18;&#x5316;
&#x4F8B;&#x5982;&#x6D6E;&#x70B9;&#x8FD0;&#x7B97;&#x6BD4;&#x6574;&#x6570;&#x8FD0;&#x7B97;&#x66F4;&#x6D88;&#x8017; CPU &#x65F6;&#x95F4;&#x7247;&#xFF0C;&#x8017;&#x7535;&#x4E5F;&#x4F1A;&#x589E;&#x52A0;&#x3002;
&#x4E00;&#x4E9B;&#x56FE;&#x50CF;&#x7B97;&#x6CD5;&#x6BD4;&#x8F83;&#x8017;&#x65F6;&#xFF0C;&#x53EF;&#x4EE5;&#x6362;&#x4E2A;&#x66F4;&#x4F18;&#x7684;&#x7B97;&#x6CD5;&#x4E5F;&#x53EF;&#x4EE5;&#x5927;&#x5927;&#x964D;&#x4F4E;cpu&#x4F7F;&#x7528;&#x3002;

&#x6240;&#x4EE5;&#x5E38;&#x7528;&#x4F18;&#x5316; CPU &#x65F6;&#x95F4;&#x7247;&#x7684;&#x65B9;&#x5F0F;&#x6709;&#xFF1A;
1&#x3001;&#x5B9A;&#x4F4D;&#x5E76;&#x89E3;&#x51B3; CPU &#x5360;&#x7528;&#x7387;&#x5F02;&#x5E38;&#x65B9;&#x6CD5;&#x3002;
2&#x3001;&#x51CF;&#x5C11;&#x5E94;&#x7528;&#x5728;&#x540E;&#x53F0;&#x7684;&#x5524;&#x9192;&#x548C;&#x8FD0;&#x884C;&#x3002;
</code></pre>
<h3 id="&#x7F51;&#x7EDC;&#x8017;&#x7535;&#x4F18;&#x5316;"><a name="&#x7F51;&#x7EDC;&#x8017;&#x7535;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x7F51;&#x7EDC;&#x8017;&#x7535;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>11.4.4. &#x7F51;&#x7EDC;&#x8017;&#x7535;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">&#x901A;&#x5E38;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x4F7F;&#x7528; WIFI &#x8FDE;&#x63A5;&#x7F51;&#x7EDC;&#x65F6;&#x7684;&#x529F;&#x8017;&#x8981;&#x4F4E;&#x4E8E;&#x4F7F;&#x7528;&#x79FB;&#x52A8;&#x7F51;&#x7EDC;&#x7684;&#x529F;&#x8017;&#x3002;
&#x4F7F;&#x7528;&#x79FB;&#x52A8;&#x7F51;&#x7EDC;&#x4F20;&#x8F93;&#x6570;&#x636E;&#xFF0C;&#x7535;&#x91CF;&#x7684;&#x6D88;&#x8017;&#x6709;&#x4EE5;&#x4E0B;3&#x79CD;&#x72B6;&#x6001;&#xFF1A;
Full power &#xFF1A;&#x9AD8;&#x529F;&#x7387;&#x72B6;&#x6001;&#xFF0C;&#x79FB;&#x52A8;&#x7F51;&#x7EDC;&#x8FDE;&#x63A5;&#x88AB;&#x6FC0;&#x6D3B;&#xFF0C;&#x5141;&#x8BB8;&#x8BBE;&#x5907;&#x4EE5;&#x6700;&#x5927;&#x7684;&#x4F20;&#x8F93;&#x901F;&#x7387;&#x8FDB;&#x884C;&#x64CD;&#x4F5C;&#x3002;
Low power &#xFF1A;&#x4F4E;&#x529F;&#x8017;&#x72B6;&#x6001;&#xFF0C;&#x5BF9;&#x7535;&#x91CF;&#x7684;&#x6D88;&#x8017;&#x5DEE;&#x4E0D;&#x591A;&#x662F; Full power &#x72B6;&#x6001;&#x4E0B;&#x7684; 50%&#x3002;
Standby &#xFF1A;&#x7A7A;&#x95F2;&#x6001;&#xFF0C;&#x6CA1;&#x6709;&#x6570;&#x636E;&#x8FDE;&#x63A5;&#x9700;&#x8981;&#x4F20;&#x8F93;&#xFF0C;&#x7535;&#x91CF;&#x6D88;&#x8017;&#x6700;&#x5C11;&#x3002;

&#x6240;&#x4EE5;&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x7F51;&#x7EDC;&#x8FDE;&#x63A5;&#x6240;&#x5E26;&#x6765;&#x7684;&#x7535;&#x91CF;&#x6D88;&#x8017;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x91C7;&#x7528;&#x5982;&#x4E0B;&#x51E0;&#x79CD;&#x65B9;&#x6848;&#xFF1A;
1&#x3001;&#x5C3D;&#x91CF;&#x5728; WIFI &#x73AF;&#x5883;&#x4E0B;&#x8FDB;&#x884C;&#x6570;&#x636E;&#x4F20;&#x8F93;&#xFF0C;&#x5728;&#x4F7F;&#x7528; WIFI &#x4F20;&#x8F93;&#x6570;&#x636E;&#x65F6;&#xFF0C;
&#x5E94;&#x8BE5;&#x5C3D;&#x53EF;&#x80FD;&#x589E;&#x5927;&#x6BCF;&#x4E2A;&#x5305;&#x7684;&#x5927;&#x5C0F;&#xFF08;&#x4E0D;&#x8D85;&#x8FC7;&#x6700;&#x5927;&#x4F20;&#x8F93;&#x5355;&#x5143; MTU &#xFF09;&#xFF0C;&#x5E76;&#x964D;&#x4F4E;&#x53D1;&#x5305;&#x7684;&#x9891;&#x7387;&#x3002;

2&#x3001;&#x5728;&#x8702;&#x7A9D;&#x79FB;&#x52A8;&#x7F51;&#x7EDC;&#x4E0B;&#x9700;&#x8981;&#x5BF9;&#x8BF7;&#x6C42;&#x65F6;&#x673A;&#x53CA;&#x6B21;&#x6570;&#x63A7;&#x5236;&#xFF0C;
&#x53EF;&#x4EE5;&#x5EF6;&#x8FDF;&#x6267;&#x884C;&#x7684;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x7A0D;&#x540E;&#x4E00;&#x8D77;&#x53D1;&#x9001;&#xFF0C;&#x6700;&#x597D;&#x505A;&#x5230;&#x6279;&#x91CF;&#x6267;&#x884C;&#xFF0C;&#x5C3D;&#x91CF;&#x907F;&#x514D;&#x9891;&#x7E41;&#x7684;&#x95F4;&#x9694;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#xFF0C;
&#x4EE5;&#x5C3D;&#x91CF;&#x591A;&#x5730;&#x4FDD;&#x6301;&#x5728; Standby &#x72B6;&#x6001;&#x3002;

3&#x3001;&#x4F7F;&#x7528; JSON &#x548C; Protobuf &#x8FDB;&#x884C;&#x6570;&#x636E;&#x538B;&#x7F29;&#xFF0C;&#x51CF;&#x5C11;&#x7F51;&#x7EDC;&#x4F7F;&#x7528;&#x65F6;&#x95F4;&#x3002;

4&#x3001;&#x7981;&#x6B62;&#x4F7F;&#x7528;&#x8F6E;&#x8BE2;&#x529F;&#x80FD;&#xFF1A;&#x8F6E;&#x8BE2;&#x4F1A;&#x5BFC;&#x81F4;&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#x4E00;&#x76F4;&#x5904;&#x4E8E;&#x88AB;&#x6FC0;&#x6D3B;&#x7684;&#x72B6;&#x6001;&#xFF0C;&#x8017;&#x7535;&#x8FC7;&#x9AD8;&#x3002;
</code></pre>
<h3 id="&#x5B9A;&#x4F4D;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x3001;&#x4F20;&#x611F;&#x5668;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x3001;&#x84DD;&#x7259;&#x8017;&#x7535;&#x4F18;&#x5316;&#x7B49;"><a name="&#x5B9A;&#x4F4D;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x3001;&#x4F20;&#x611F;&#x5668;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x3001;&#x84DD;&#x7259;&#x8017;&#x7535;&#x4F18;&#x5316;&#x7B49;" class="anchor-navigation-ex-anchor" href="#&#x5B9A;&#x4F4D;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x3001;&#x4F20;&#x611F;&#x5668;&#x8017;&#x7535;&#x4F18;&#x5316;-&#x3001;&#x84DD;&#x7259;&#x8017;&#x7535;&#x4F18;&#x5316;&#x7B49;"><i class="fa fa-link" aria-hidden="true"></i></a>11.4.5. &#x5B9A;&#x4F4D;&#x8017;&#x7535;&#x4F18;&#x5316; &#x3001;&#x4F20;&#x611F;&#x5668;&#x8017;&#x7535;&#x4F18;&#x5316; &#x3001;&#x84DD;&#x7259;&#x8017;&#x7535;&#x4F18;&#x5316;&#x7B49;</h3>
<pre><code class="lang-text">1&#x3001;&#x6839;&#x636E;&#x573A;&#x666F;&#x8C28;&#x614E;&#x9009;&#x62E9;&#x5B9A;&#x4F4D;&#x6A21;&#x5F0F;&#x3002;
&#x5BF9;&#x5B9A;&#x4F4D;&#x51C6;&#x786E;&#x5EA6;&#x6CA1;&#x90A3;&#x4E48;&#x9AD8;&#x7684;&#x573A;&#x666F;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x4F4E;&#x7CBE;&#x5EA6;&#x6A21;&#x5F0F;&#x3002;

2&#x3001;&#x53EF;&#x4EE5;&#x8003;&#x8651;&#x7F51;&#x7EDC;&#x5B9A;&#x4F4D;&#x4EE3;&#x66FF; GPS&#x3002;

3&#x3001;&#x4F7F;&#x7528;&#x540E;&#x52A1;&#x5FC5;&#x53CA;&#x65F6;&#x5173;&#x95ED;&#xFF0C;&#x51CF;&#x5C11;&#x66F4;&#x65B0;&#x9891;&#x7387;&#xFF0C;
&#x4F8B;&#x5982;&#x5B9A;&#x4F4D;&#x5F00;&#x542F;&#x4E00;&#x5B9A;&#x65F6;&#x95F4;&#x540E;&#x8D85;&#x8FC7;&#x67D0;&#x4E2A;&#x9608;&#x503C;&#x53EF;&#x4EE5;&#x6267;&#x884C;&#x4E00;&#x4E2A;&#x515C;&#x5E95;&#x7B56;&#x7565;&#xFF1A;&#x5F3A;&#x5236;&#x5173;&#x95ED; GPS&#x3002;
</code></pre>
<h3 id="&#x754C;&#x9762;&#x8017;&#x7535;&#x4F18;&#x5316;"><a name="&#x754C;&#x9762;&#x8017;&#x7535;&#x4F18;&#x5316;" class="anchor-navigation-ex-anchor" href="#&#x754C;&#x9762;&#x8017;&#x7535;&#x4F18;&#x5316;"><i class="fa fa-link" aria-hidden="true"></i></a>11.4.6. &#x754C;&#x9762;&#x8017;&#x7535;&#x4F18;&#x5316;</h3>
<pre><code class="lang-text">1&#x3001;&#x79BB;&#x5F00;&#x754C;&#x9762;&#x540E;&#x505C;&#x6B62;&#x76F8;&#x5173;&#x6D3B;&#x52A8;&#xFF0C;&#x4F8B;&#x5982;&#x5173;&#x95ED;&#x52A8;&#x753B;&#x3002;

2&#x3001;&#x8017;&#x7535;&#x64CD;&#x4F5C;&#x5224;&#x65AD;&#x524D;&#x540E;&#x53F0;&#xFF0C;&#x5982;&#x679C;&#x662F;&#x540E;&#x53F0;&#x5219;&#x4E0D;&#x6267;&#x884C;&#x76F8;&#x5173;&#x64CD;&#x4F5C;&#x3002;
</code></pre>
<h1 id="&#x7A33;&#x5B9A;&#x6027;-&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><a name="&#x7A33;&#x5B9A;&#x6027;-&#x4F18;&#x5316;-&#x5B8C;&#x6210;" class="anchor-navigation-ex-anchor" href="#&#x7A33;&#x5B9A;&#x6027;-&#x4F18;&#x5316;-&#x5B8C;&#x6210;"><i class="fa fa-link" aria-hidden="true"></i></a>12. &#x7A33;&#x5B9A;&#x6027; &#x4F18;&#x5316; (&#x5B8C;&#x6210;)</h1>
<h2 id="&#x5D29;&#x6E83;&#x7387;-&#x3001;dau"><a name="&#x5D29;&#x6E83;&#x7387;-&#x3001;dau" class="anchor-navigation-ex-anchor" href="#&#x5D29;&#x6E83;&#x7387;-&#x3001;dau"><i class="fa fa-link" aria-hidden="true"></i></a>12.1. &#x5D29;&#x6E83;&#x7387; &#x3001;DAU</h2>
<pre><code class="lang-text">DAU ( Daily Active User )&#xFF0C;&#x65E5;&#x6D3B;&#x8DC3;&#x7528;&#x6237;&#x6570;&#x91CF;&#x3002;
&#x5D29;&#x6E83;&#x7387; &#x662F;&#x5954;&#x6E83;&#x6B21;&#x6570;&#x6216;&#x4EBA;&#x6570;&#x9664;&#x4EE5; DAU &#x3002;
</code></pre>
<h2 id="&#x7A33;&#x5B9A;&#x7684;&#x7EAC;&#x5EA6;"><a name="&#x7A33;&#x5B9A;&#x7684;&#x7EAC;&#x5EA6;" class="anchor-navigation-ex-anchor" href="#&#x7A33;&#x5B9A;&#x7684;&#x7EAC;&#x5EA6;"><i class="fa fa-link" aria-hidden="true"></i></a>12.2. &#x7A33;&#x5B9A;&#x7684;&#x7EAC;&#x5EA6;</h2>
<pre><code class="lang-text">&#x7A33;&#x5B9A;&#x7684;&#x7EAC;&#x5EA6;&#xFF1A;
1&#x3001;&#x5D29;&#x6E83;&#x89D2;&#x5EA6;
&#x975E;&#x5E38;&#x91CD;&#x8981;&#xFF0C;&#x51FA;&#x73B0;&#x95EA;&#x9000;&#x73B0;&#x8C61;&#x4F1A;&#x5BFC;&#x81F4;&#x7528;&#x6237;&#x4F53;&#x9A8C;&#x975E;&#x5E38;&#x5DEE;&#x3002;
&#x5BB9;&#x9519;&#x673A;&#x5236;&#xFF0C;&#x53D1;&#x751F;&#x5F02;&#x5E38;&#x5C3D;&#x91CF;&#x4E0D;&#x8981;&#x95EA;&#x9000;&#xFF0C;&#x800C;&#x662F;&#x7ED9;&#x51FA;&#x63D0;&#x793A;&#x3002;
&#x4E0D;&#x8981;&#x968F;&#x610F;&#x4F7F;&#x7528;try catch&#x53BB;&#x9690;&#x85CF;&#x95EE;&#x9898;&#xFF1A;&#x800C;&#x5E94;&#x8BE5;&#x4ECE;&#x6E90;&#x5934; &#x4E86;&#x89E3;&#x5D29;&#x6E83;&#x7684;&#x672C;&#x8D28;&#x539F;&#x56E0;&#xFF0C;&#x4FDD;&#x8BC1;&#x540E;&#x9762;&#x7684;&#x8FD0;&#x884C;&#x6D41;&#x7A0B;&#x3002;

2&#x3001;&#x6027;&#x80FD;&#x7A33;&#x5B9A;
&#x542F;&#x52A8;&#x901F;&#x5EA6;&#x3001;&#x6D41;&#x7545;&#x5361;&#x987F;&#x7A0B;&#x5EA6;&#x3001;&#x5185;&#x5B58;&#x5360;&#x7528;&#x3001;&#x8017;&#x7535;&#x91CF;&#x3001;&#x754C;&#x9762;&#x7ED8;&#x5236;&#x901F;&#x5EA6;&#x3001;&#x7F51;&#x7EDC;&#x6D41;&#x91CF;&#x3001; 
&#x4FDD;&#x8BC1;&#x4E1A;&#x52A1;&#x529F;&#x80FD;&#x53EF;&#x7528;&#x3002;ANR &#x54CD;&#x5E94;&#x8D85;&#x65F6;&#x3001; &#x80FD;&#x6301;&#x7EED;&#x8FD0;&#x884C;&#x591A;&#x957F;&#x65F6;&#x95F4;

3&#x3001;&#x4E1A;&#x52A1;&#x53EF;&#x7528;&#x6027;&#x7EAC;&#x5EA6;&#x3002;
&#x4FDD;&#x8BC1;APP&#x4E3B;&#x6D41;&#x7A0B; &#x548C;&#x6838;&#x5FC3;&#x8DEF;&#x5F84;&#x7684;&#x7A33;&#x5B9A;&#x53EF;&#x7528;&#x6027;&#x3002;&#x786E;&#x4FDD;&#x6838;&#x5FC3;&#x4E1A;&#x52A1;&#x9AD8;&#x53EF;&#x7528;&#x3002;&#x56E0;&#x4E3A;&#x6838;&#x5FC3;&#x4E1A;&#x52A1;&#x8986;&#x76D6;&#x7684;&#x4EBA;&#x7FA4;&#x6700;&#x591A;&#x3002;
&#x5176;&#x4ED6;&#x65B9;&#x9762;&#x53EA;&#x6709;&#x7ECF;&#x5E38;&#x7528;&#x7684;&#x4EBA;&#x624D;&#x6709;&#x53EF;&#x80FD;&#x89E6;&#x53D1;&#x3002;
&#x4FDD;&#x8BC1;&#x4E1A;&#x52A1;&#x53EF;&#x7528;&#x7684;&#x9AD8;&#x6548;&#x53EF;&#x7528;&#xFF0C;&#x6027;&#x80FD;&#x4E0D;&#x80FD;&#x76F8;&#x5DEE;&#x8D77;&#x4F0F;&#x592A;&#x5927;&#x3002;
</code></pre>
<h2 id="&#x7A33;&#x5B9A;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;"><a name="&#x7A33;&#x5B9A;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;" class="anchor-navigation-ex-anchor" href="#&#x7A33;&#x5B9A;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;"><i class="fa fa-link" aria-hidden="true"></i></a>12.3. &#x7A33;&#x5B9A;&#x4F18;&#x5316;&#x7684;&#x65B9;&#x5411;</h2>
<pre><code class="lang-text">&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF1A;
1&#x3001;&#x9884;&#x9632;&#x4E3A;&#x4E3B;&#x3001;&#x76D1;&#x63A7;&#x4FEE;&#x590D;&#x4E3A;&#x8F85;
&#x2460;&#x3001;&#x5F00;&#x53D1;&#x9636;&#x6BB5; &#xFF0C;&#x91C7;&#x7528;&#x6210;&#x719F;&#x7A33;&#x5B9A;&#x65B9;&#x6848;&#x3001;&#x52A0;&#x5F3A;&#x7F16;&#x7801;&#x80FD;&#x529B;&#xFF1B;
&#x5BF9;APP&#x7684; cpu&#x3001;&#x5185;&#x5B58;&#x3001;&#x8FDB;&#x7A0B;&#x7EBF;&#x7A0B;&#x6570;&#x3001;&#x7F51;&#x7EDC;&#x6D41;&#x91CF;&#x3001;&#x8017;&#x7535;&#x91CF;&#x3001;log&#x8BB0;&#x5F55;&#x3001;&#x542F;&#x52A8;&#x9875;&#x8017;&#x65F6; &#x7B49;&#x4FE1;&#x606F;&#x8BB0;&#x5F55;&#x548C;&#x5206;&#x6790;

&#x2461;&#x6D4B;&#x8BD5;&#x9636;&#x6BB5;&#xFF1A;&#x52A0;&#x5F3A;&#x673A;&#x578B;&#x8986;&#x76D6;&#x6D4B;&#x8BD5;&#x3001;&#x538B;&#x529B;&#x6D4B;&#x8BD5;&#x3001;&#x7279;&#x6B8A;&#x573A;&#x666F;&#x6D4B;&#x8BD5;(&#x4F8B;&#x5982;&#x65E0;&#x7F51;&#x7EDC;&#x3001;&#x6545;&#x610F;&#x4E0B;&#x53D1;&#x9519;&#x4E71;&#x6570;&#x636E;&#x7B49;)&#xFF1B;
&#x4ECE;&#x7528;&#x6237;&#x89D2;&#x5EA6;&#x5165;&#x624B;&#xFF0C;&#x5C3D;&#x91CF;&#x6A21;&#x62DF;&#x771F;&#x5B9E;&#x4F7F;&#x7528;&#x573A;&#x666F;&#x3001;&#x6D4B;&#x8BD5;&#x9A8C;&#x8BC1;&#x3002;&#x4E0D;&#x8981;&#x4ECE;&#x5F00;&#x53D1;&#x8005;&#x89D2;&#x5EA6;&#x8FDB;&#x884C;&#x6D4B;&#x8BD5;&#x3002;
&#x7EBF;&#x4E0B;&#x5927;&#x89C4;&#x6A21;&#x8986;&#x76D6;&#x6D4B;&#x8BD5;&#x3001;&#x53D1;&#x73B0;&#x95EE;&#x9898; &#x89E3;&#x51B3;&#x95EE;&#x9898;&#xFF1B;

&#x2462;&#x53D1;&#x5E03;&#x9636;&#x6BB5;&#xFF1A;&#x8FDB;&#x884C;&#x7070;&#x5EA6;&#x53D1;&#x5E03;&#x3001;&#x591A;&#x8F6E;&#x53D1;&#x5E03; &#xFF1B;
&#x53D1;&#x5E03;&#x524D;&#x591A;&#x6D4B;&#x8BD5;&#x3001;&#x6355;&#x83B7;&#x5F02;&#x5E38;&#x4E0A;&#x4F20;&#x5E76;&#x5206;&#x6790; &#x3001;&#x53D1;&#x65B0;&#x5305;&#x4FEE;&#x590D;&#x6216;&#x8005;&#x70ED;&#x4FEE;&#x590D;&#x3002; 
&#x5982;&#x679C;&#x65B0;&#x53D1;&#x5E03;&#x7684;&#x529F;&#x80FD;&#x51FA;&#x73B0;BUG&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x8FDC;&#x7A0B;&#x5F00;&#x5173;&#x8FDB;&#x884C;&#x5173;&#x95ED;&#x529F;&#x80FD;&#x6A21;&#x5757;&#xFF0C;&#x4E0D;&#x8BA9;&#x8BE5;&#x529F;&#x80FD;&#x663E;&#x793A;&#x3002;

&#x2463; &#x8FD0;&#x7EF4;&#x9636;&#x6BB5;&#xFF1A; &#x7248;&#x672C;&#x56DE;&#x9000;&#x7B56;&#x7565;&#x3001;&#x70ED;&#x4FEE;&#x590D;&#x3001;&#x53D1;&#x5E03;&#x65B0;&#x7248;&#x672C;
&#x7EBF;&#x4E0A;&#x5B9A;&#x4F4D;&#x95EE;&#x9898; &#x5B9A;&#x4F4D;&#x673A;&#x578B;&#x3002;
&#x53D1;&#x751F;&#x5D29;&#x6E83;&#x5F02;&#x5E38;&#x65F6;&#xFF0C;&#x9700;&#x8981;&#x8FDC;&#x7A0B;&#x4E0A;&#x62A5;&#x76F8;&#x5173;&#x4FE1;&#x606F;&#xFF0C;&#x5305;&#x62EC; &#x62A5;&#x9519;&#x4FE1;&#x606F;&#x3001;&#x673A;&#x578B;&#x3001;&#x7CFB;&#x7EDF;&#x7248;&#x672C;&#x3001;APP&#x7248;&#x672C;&#x3001;&#x6E20;&#x9053;&#x7B49;&#x3002;
</code></pre>
<h2 id="&#x7A33;&#x5B9A;&#x76D1;&#x63A7;&#x5DE5;&#x5177;"><a name="&#x7A33;&#x5B9A;&#x76D1;&#x63A7;&#x5DE5;&#x5177;" class="anchor-navigation-ex-anchor" href="#&#x7A33;&#x5B9A;&#x76D1;&#x63A7;&#x5DE5;&#x5177;"><i class="fa fa-link" aria-hidden="true"></i></a>12.4. &#x7A33;&#x5B9A;&#x76D1;&#x63A7;&#x5DE5;&#x5177;</h2>
<pre><code class="lang-text">1&#x3001;&#x4F8B;&#x5982;Android &#x81EA;&#x5E26;&#x7684; monkey 
2&#x3001; &#x817E;&#x8BAF;&#x7684; Bugly 
3&#x3001;&#x963F;&#x91CC;&#x7684;  mobileperf
</code></pre>
<h2 id="app&#x5355;&#x5143;&#x6D4B;&#x8BD5;"><a name="app&#x5355;&#x5143;&#x6D4B;&#x8BD5;" class="anchor-navigation-ex-anchor" href="#app&#x5355;&#x5143;&#x6D4B;&#x8BD5;"><i class="fa fa-link" aria-hidden="true"></i></a>12.5. APP&#x5355;&#x5143;&#x6D4B;&#x8BD5;</h2>
<h3 id="&#x5355;&#x5143;&#x6D4B;&#x8BD5;"><a name="&#x5355;&#x5143;&#x6D4B;&#x8BD5;" class="anchor-navigation-ex-anchor" href="#&#x5355;&#x5143;&#x6D4B;&#x8BD5;"><i class="fa fa-link" aria-hidden="true"></i></a>12.5.1. &#x5355;&#x5143;&#x6D4B;&#x8BD5;</h3>
<pre><code class="lang-text">// &#x9ED1;&#x76D2;&#x6D4B;&#x8BD5;
&#x4E00;&#x822C;&#x800C;&#x8A00;&#xFF0C;&#x90FD;&#x662F;&#x81EA;&#x5DF1;&#x6216;&#x8005;&#x6D4B;&#x8BD5;&#x505A;&#x505A;&#x9ED1;&#x76D2;&#x6D4B;&#x8BD5;&#xFF0C;&#x6A21;&#x4EFF;&#x7528;&#x6237;&#x4F7F;&#x7528;&#x573A;&#x666F; &#x4F7F;&#x7528;&#x5373;&#x53EF;&#x3002;
&#x6211;&#x95EE;&#x8FC7;&#x5F88;&#x591A;&#x4EBA;&#xFF0C;&#x4ED6;&#x4EEC;&#x57FA;&#x672C;&#x90FD;&#x662F;&#x8FD9;&#x6837;&#x6D4B;&#x8BD5;&#x540E;&#x5C31;&#x4E0A;&#x7EBF;&#x4E86;&#x3002;

// &#x767D;&#x76D2;&#x6D4B;&#x8BD5;
1&#x3001;&#x5BF9;&#x4E8E;&#x4E00;&#x4E9B; &#x8981;&#x6C42;&#x4E25;&#x8C28;&#x7684;&#x5927;&#x578B; app &#xFF0C;&#x4F8B;&#x5982; &#x5FAE;&#x4FE1; &#x652F;&#x4ED8;&#x5B9D;&#xFF0C;&#x80AF;&#x5B9A;&#x662F;&#x8981;&#x505A;&#x767D;&#x76D2;&#x6D4B;&#x8BD5;&#x4E86;&#x3002;
&#x9ED1;&#x76D2;&#x6D4B;&#x8BD5;&#x65E0;&#x6CD5;&#x5B8C;&#x5168;&#x8986;&#x76D6;&#xFF0C;&#x4E00;&#x65E6;&#x51FA;&#x9519;&#xFF0C;&#x635F;&#x5931;&#x65E0;&#x6CD5;&#x627F;&#x53D7; &#xFF0C;&#x5F53;&#x7136;&#xFF0C;&#x8FD9;&#x79CD;&#x7EA7;&#x522B;&#x7684;&#x6D4B;&#x8BD5;&#xFF0C;&#x90FD;&#x6709;&#x4E13;&#x95E8;&#x7684;&#x6D4B;&#x8BD5;&#x4EBA;&#x5458;&#x3002;

2&#x3001;&#x6709;&#x4E00;&#x4E9B;&#x5927;&#x578B;&#x7684;app ,&#x7F16;&#x8BD1;&#x65F6;&#x95F4;&#x6BD4;&#x8F83;&#x957F;&#xFF0C;&#x6216;&#x8005;&#x8DEF;&#x5F84;&#x6BD4;&#x8F83;&#x6DF1;&#x3002;&#x91C7;&#x7528;&#x624B;&#x52A8;&#x70B9;&#x51FB;&#x8BD5;&#x9A8C;&#x770B;&#x6548;&#x679C;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x4F1A;&#x6BD4;&#x8F83;&#x6D6A;&#x8D39;&#x65F6;&#x95F4;&#x3002;
&#x4E3A;&#x4E86;&#x514D;&#x53BB;&#x7F16;&#x8BD1;&#x5B89;&#x88C5;&#x7684;&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#xFF0C;&#x8981;&#x5F15;&#x5165;&#x767D;&#x76D2;&#x6D4B;&#x8BD5;&#xFF0C;&#x7F29;&#x77ED;&#x81EA;&#x6D4B;&#x7684;&#x65F6;&#x95F4;&#x3002;

// TDD ( Test-Driven Development ) &#x6D4B;&#x8BD5;&#x9A71;&#x52A8;&#x5F00;&#x53D1;
</code></pre>
<h3 id="&#x5355;&#x5143;&#x6D4B;&#x8BD5;-junit4-&#x65B9;&#x6848;"><a name="&#x5355;&#x5143;&#x6D4B;&#x8BD5;-junit4-&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#&#x5355;&#x5143;&#x6D4B;&#x8BD5;-junit4-&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>12.5.2. &#x5355;&#x5143;&#x6D4B;&#x8BD5; JUnit4 &#x65B9;&#x6848;</h3>
<p>Androidstudio &#x81EA;&#x5E26;&#x3002;</p>
<pre><code class="lang-text">&#x6D4B;&#x8BD5;&#x8FD0;&#x884C;&#x5728;&#x672C;&#x5730;&#x5F00;&#x53D1;&#x73AF;&#x5883;&#x7684;Java&#x865A;&#x62DF;&#x673A;&#x4E0A;&#xFF0C;&#x65E0;&#x9700;&#x8FDE;&#x63A5;Android&#x8BBE;&#x5907;&#x6216;&#x6A21;&#x62DF;&#x5668;&#x3002;
&#x56E0;&#x6B64;&#xFF0C;&#x65E0;&#x6CD5;&#x83B7;&#x5F97;Android&#x76F8;&#x5173;&#x7684;API&#xFF0C;&#x53EA;&#x80FD;&#x6D4B;&#x8BD5;&#x53EA;&#x4F7F;&#x7528;Java API&#x7684;&#x4E00;&#x4E9B;&#x529F;&#x80FD;&#x3002;

@Test    &#x8868;&#x793A;&#x6B64;&#x65B9;&#x6CD5;&#x4E3A;&#x6D4B;&#x8BD5;&#x65B9;&#x6CD5;
@Before    &#x5728;&#x6BCF;&#x4E2A;&#x6D4B;&#x8BD5;&#x65B9;&#x6CD5;&#x524D;&#x6267;&#x884C;&#xFF0C;&#x53EF;&#x505A;&#x521D;&#x59CB;&#x5316;&#x64CD;&#x4F5C;
@After    &#x5728;&#x6BCF;&#x4E2A;&#x6D4B;&#x8BD5;&#x65B9;&#x6CD5;&#x540E;&#x6267;&#x884C;&#xFF0C;&#x53EF;&#x505A;&#x91CA;&#x653E;&#x8D44;&#x6E90;&#x64CD;&#x4F5C;
@Ignore    &#x5FFD;&#x7565;&#x7684;&#x6D4B;&#x8BD5;&#x65B9;&#x6CD5;

assertEquals    &#x65AD;&#x8A00;&#x4F20;&#x5165;&#x7684;&#x9884;&#x671F;&#x503C;&#x4E0E;&#x5B9E;&#x9645;&#x503C;&#x662F;&#x76F8;&#x7B49;&#x7684;
assertArrayEquals    &#x65AD;&#x8A00;&#x4F20;&#x5165;&#x7684;&#x9884;&#x671F;&#x6570;&#x7EC4;&#x4E0E;&#x5B9E;&#x9645;&#x6570;&#x7EC4;&#x662F;&#x76F8;&#x7B49;&#x7684;
assertNull    &#x65AD;&#x8A00;&#x4F20;&#x5165;&#x7684;&#x5BF9;&#x8C61;&#x662F;&#x4E3A;&#x7A7A;
assertTrue    &#x65AD;&#x8A00;&#x6761;&#x4EF6;&#x4E3A;&#x771F;
assertSame    &#x65AD;&#x8A00;&#x4E24;&#x4E2A;&#x5BF9;&#x8C61;&#x5F15;&#x7528;&#x540C;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x76F8;&#x5F53;&#x4E8E;&#x201C;==&#x201D;
assertThat    &#x65AD;&#x8A00;&#x5B9E;&#x9645;&#x503C;&#x662F;&#x5426;&#x6EE1;&#x8DB3;&#x6307;&#x5B9A;&#x7684;&#x6761;&#x4EF6;

@Ignore(&quot;&#x7B49;&#x4F1A;&#x518D;&#x6D4B;&quot;)
@Test
public void getAppVersion(){  }

@Test
public void valueAdd() {
    MyDeviceTool tool = new MyDeviceTool() ;
    int sum = tool.valueAdd(10 ,5);
    assertEquals(5 ,sum);
}
</code></pre>
<h3 id="&#x5355;&#x5143;&#x6D4B;&#x8BD5;-instrumentation-&#x65B9;&#x6848;"><a name="&#x5355;&#x5143;&#x6D4B;&#x8BD5;-instrumentation-&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#&#x5355;&#x5143;&#x6D4B;&#x8BD5;-instrumentation-&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>12.5.3. &#x5355;&#x5143;&#x6D4B;&#x8BD5; Instrumentation &#x65B9;&#x6848;</h3>
<pre><code class="lang-text">&#x9700;&#x8981;&#x5C06;&#x6574;&#x4E2A;&#x9879;&#x76EE;&#x6253;&#x5305;&#x6210;apk&#xFF0C;&#x4E0A;&#x4F20;&#x5230;&#x6A21;&#x62DF;&#x5668;&#x6216;&#x771F;&#x673A;&#x4E0A;&#xFF0C;&#x5C31;&#x8DDF;&#x8FD0;&#x884C;&#x4E86;&#x4E00;&#x6B21;app &#x3002;
&#x6700;&#x8FD1;&#x7684;&#x6587;&#x7AE0;(20201222)&#x8BB2;&#x5230; Androidstudio +Instrumentation &#x6BD4;&#x8F83;&#x5C11;&#xFF0C;
Androidstudio3.4.1 &#x9ED8;&#x8BA4;&#x751F;&#x6210;&#x7684;&#x4EE3;&#x7801;&#x4E2D;&#x4E5F;&#x6CA1;&#x6709; Instrumentation &#x76F8;&#x5173;&#x914D;&#x7F6E;&#xFF0C;
&#x662F;&#x88AB;&#x66FF;&#x4EE3;&#x4E86;&#x5417;&#xFF0C;&#x6682;&#x65F6;&#x53BB;&#x770B;&#x770B;&#x5176;&#x4ED6;&#x7684;&#x65B9;&#x6848;&#x3002;
</code></pre>
<h3 id="&#x5355;&#x5143;&#x6D4B;&#x8BD5;-robolectric-&#x65B9;&#x6848;"><a name="&#x5355;&#x5143;&#x6D4B;&#x8BD5;-robolectric-&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#&#x5355;&#x5143;&#x6D4B;&#x8BD5;-robolectric-&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>12.5.4. &#x5355;&#x5143;&#x6D4B;&#x8BD5; robolectric &#x65B9;&#x6848;</h3>
<p>With Robolectric, your tests run in a simulated Android environment inside a JVM, 
without the overhead of an emulator.</p>
<pre><code class="lang-text">http://robolectric.org
https://github.com/robolectric/robolectric

// &#x914D;&#x7F6E;
testImplementation &apos;junit:junit:4.12&apos;
testImplementation &apos;org.robolectric:robolectric:4.1&apos;
testImplementation &apos;org.robolectric:shadows-multidex:4.1&apos;

testOptions {
    unitTests {
        includeAndroidResources = true
    }
}

// &#x4F1A;&#x63D0;&#x793A;&#x4E0B;&#x8F7D;&#x6587;&#x4EF6;&#x5931;&#x8D25;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x624B;&#x52A8;&#x4E0B;&#x8F7D;&#x4E00;&#x4E0B;&#x3002;
Downloading: org/robolectric/android-all/9-robolectric-4913185-2/android-all-9-robolectric-4913185-2.jar 
from repository sonatype at https://oss.sonatype.org/content/groups/public/
Transferring 118099K from sonatype

&#x4E0B;&#x8F7D;&#x5730;&#x5740;&#x5C31;&#x662F;&#x6309;&#x63D0;&#x793A;&#x62FC;&#x63A5;&#x4E00;&#x4E0B;,&#x5C06;&#x4E0B;&#x8F7D;&#x597D;&#x7684;&#x6587;&#x4EF6;&#x653E;&#x5230; android-all-9-robolectric-4913185-2.jar.tmp &#x76EE;&#x5F55;&#x4E0B; &#xFF0C;
&#x7528; everything &#x5168;&#x5C40;&#x641C;&#x7D22;&#x4E00;&#x4E0B;&#x3002;
----&gt;
https://oss.sonatype.org/content/groups/public/org/robolectric/android-all/9-robolectric-4913185-2/android-all-9-robolectric-4913185-2.jar

// &#x7B80;&#x5355;&#x793A;&#x8303;
@RunWith(RobolectricTestRunner.class)
@Config( sdk = 28)
public class TestShow {
    @Test
    public void myTest(){
        Context context =  RuntimeEnvironment.application.getApplicationContext() ;
        MyDeviceTool myDeviceTool =  new MyDeviceTool();
        String packageName =myDeviceTool.getPackageName(context) ;
        WkLogTool.showLog(&quot;packageName=&quot;+packageName);
    }
}

&#x6211;&#x7528;&#x7684;&#x8F83;&#x5C11;&#xFF0C;&#x4E00;&#x822C;&#x53EA;&#x662F;&#x7528;&#x6765;&#x6D4B;&#x8BD5;&#x4E00;&#x4E0B;&#x903B;&#x8F91;&#x3002;
</code></pre>
<h2 id="crash-&#x5D29;&#x6E83;&#x89E3;&#x51B3;&#x529E;&#x6CD5;"><a name="crash-&#x5D29;&#x6E83;&#x89E3;&#x51B3;&#x529E;&#x6CD5;" class="anchor-navigation-ex-anchor" href="#crash-&#x5D29;&#x6E83;&#x89E3;&#x51B3;&#x529E;&#x6CD5;"><i class="fa fa-link" aria-hidden="true"></i></a>12.6. crash &#x5D29;&#x6E83;&#x89E3;&#x51B3;&#x529E;&#x6CD5;</h2>
<pre><code class="lang-text">1&#x3001;(&#x7EBF;&#x4E0A;) &#x5E38;&#x89C4;Crash
&#x53D1;&#x7248;&#x65F6;&#x6216;&#x8005;&#x901A;&#x8FC7;&#x70ED;&#x4FEE;&#x590D;&#x89E3;&#x51B3;

2&#x3001;&#x7CFB;&#x7EDF;&#x7EA7; Crash &#x5C1D;&#x8BD5;Hook&#x7ED5;&#x8FC7;

3&#x3001;&#x7591;&#x96BE; Crash&#x91CD;&#x70B9;&#x7A81;&#x7834;&#x6216;&#x66F4;&#x6362;&#x65B9;&#x6848;
&#x76EE;&#x524D;&#x6280;&#x672F;&#x80FD;&#x529B;&#x6682;&#x65F6;&#x65E0;&#x6CD5;&#x89E3;&#x51B3;&#x7684;&#x5C31;&#x60F3;&#x529E;&#x6CD5;&#x89C4;&#x907F;&#x95EE;&#x9898;&#xFF0C;&#x66F4;&#x6362;&#x5B9E;&#x73B0;&#x65B9;&#x6848;
</code></pre>
<h2 id="&#x5982;&#x679C;&#x53D1;&#x751F;&#x4E86;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#xFF0C;&#x600E;&#x4E48;&#x6B62;&#x635F;"><a name="&#x5982;&#x679C;&#x53D1;&#x751F;&#x4E86;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#xFF0C;&#x600E;&#x4E48;&#x6B62;&#x635F;" class="anchor-navigation-ex-anchor" href="#&#x5982;&#x679C;&#x53D1;&#x751F;&#x4E86;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#xFF0C;&#x600E;&#x4E48;&#x6B62;&#x635F;"><i class="fa fa-link" aria-hidden="true"></i></a>12.7. &#x5982;&#x679C;&#x53D1;&#x751F;&#x4E86;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#xFF0C;&#x600E;&#x4E48;&#x6B62;&#x635F;</h2>
<pre><code class="lang-text">1&#x3001;&#x6709;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#xFF0C;&#x7D27;&#x6025;&#x5173;&#x95ED;&#x529F;&#x80FD;&#x7684;&#x5165;&#x53E3;&#xFF0C;&#x8BA9;App&#x5904;&#x4E8E;&#x53EF;&#x63A7;&#x7684;&#x72B6;&#x6001;&#x3002;
2&#x3001;&#x70ED;&#x4FEE;&#x590D;&#x3002;
3&#x3001;&#x515C;&#x5E95;&#x7B56;&#x7565;&#xFF0C;&#x5982;&#x679C;&#x76D1;&#x6D4B;&#x5230;&#x8FDE;&#x7EED;&#x591A;&#x6B21;&#x5728;&#x540C;&#x4E00;&#x4E2A;&#x5730;&#x65B9;&#x5954;&#x6E83;&#xFF0C;&#x53EF;&#x4EE5;&#x62E6;&#x622A;&#x6B64;&#x6D41;&#x7A0B;&#xFF0C;
&#x7ED9;&#x4E88;&#x7528;&#x6237;&#x76F8;&#x5173;&#x63D0;&#x793A;&#xFF0C;&#x4E0D;&#x8981;&#x4E00;&#x76F4;&#x5D29;&#x6E83;&#x3002;&#x7136;&#x540E;&#x518D;&#x4E0A;&#x62A5;&#x9519;&#x8BEF;&#x3002;
</code></pre>
<h1 id="&#x63D0;&#x95EE;-&#xFF08;&#x6301;&#x7EED;&#x66F4;&#x65B0;&#xFF09;"><a name="&#x63D0;&#x95EE;-&#xFF08;&#x6301;&#x7EED;&#x66F4;&#x65B0;&#xFF09;" class="anchor-navigation-ex-anchor" href="#&#x63D0;&#x95EE;-&#xFF08;&#x6301;&#x7EED;&#x66F4;&#x65B0;&#xFF09;"><i class="fa fa-link" aria-hidden="true"></i></a>13. &#x63D0;&#x95EE; &#xFF08;&#x6301;&#x7EED;&#x66F4;&#x65B0;&#xFF09;</h1>
<h2 id="&#x5982;&#x4F55;&#x6280;&#x672F;&#x9009;&#x578B;"><a name="&#x5982;&#x4F55;&#x6280;&#x672F;&#x9009;&#x578B;" class="anchor-navigation-ex-anchor" href="#&#x5982;&#x4F55;&#x6280;&#x672F;&#x9009;&#x578B;"><i class="fa fa-link" aria-hidden="true"></i></a>13.1. &#x5982;&#x4F55;&#x6280;&#x672F;&#x9009;&#x578B;</h2>
<pre><code class="lang-text">&#x9996;&#x5148;&#x8981;&#x786E;&#x4FDD;&#x4E00;&#x70B9;&#xFF1A;&#x6280;&#x672F;&#x9009;&#x578B;&#x662F;&#x7A33;&#x5B9A;&#x538B;&#x5012;&#x4E00;&#x5207;&#x3001;&#x5148;&#x9A8C;&#x8BC1;&#x540E;&#x4F7F;&#x7528;&#x3002;
&#x4E0D;&#x7A33;&#x5B9A;&#x7684;&#x6280;&#x672F;&#x6216;&#x6846;&#x67B6;&#xFF0C;&#x5728;&#x540E;&#x671F;&#x4F1A;&#x5E26;&#x6765;&#x5F88;&#x591A;&#x7684;&#x9EBB;&#x70E6;&#xFF0C;

&#x6B64;&#x9879;&#x6280;&#x672F;&#x662F;&#x5426;&#x8981;&#x88AB;&#x91C7;&#x7EB3;&#xFF0C;&#x53EF;&#x4EE5;&#x8003;&#x8651;&#x4EE5;&#x4E0B;&#x56E0;&#x7D20;
1&#x3001;&#x8BE5;&#x6280;&#x672F;&#x662F;&#x5426;&#x6210;&#x719F;&#xFF0C;&#x662F;&#x5426;&#x5DF2;&#x7ECF;&#x88AB;&#x5E7F;&#x6CDB;&#x5E94;&#x7528;&#x548C;&#x9A8C;&#x8BC1;&#x8FC7;&#x3002;
&#x4E00;&#x4E9B;&#x6280;&#x672F;&#x968F;&#x7740;&#x5F00;&#x53D1;&#x7248;&#x672C;&#x7684;&#x63A8;&#x8FDB;&#xFF0C;API&#x4F1A;&#x5927;&#x5E45;&#x6539;&#x53D8;&#xFF0C;&#x751A;&#x81F3;&#x4E0D;&#x518D;&#x7EF4;&#x62A4;&#x65E7;&#x7248;&#x672C;&#xFF0C;&#x5BFC;&#x81F4;&#x65E7;&#x7248;&#x672C;&#x4E2D;&#x7684;BUG&#x65E0;&#x4EBA;&#x4FEE;&#x590D;&#xFF0C;&#x903C;&#x8FEB;&#x4F60;&#x5347;&#x7EA7;&#x3002;
&#x65B0;&#x6280;&#x672F;&#x53EF;&#x80FD;&#x4F1A;&#x6709;&#x5F88;&#x591A;&#x672A;&#x77E5;&#x7684;BUG&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x6DF1;&#x5EA6;&#x4F7F;&#x7528;&#x540E;&#x9047;&#x5230;&#x4E00;&#x4E2A;Bug&#xFF0C;&#x4F60;&#x81EA;&#x5DF1;&#x65E0;&#x6CD5;&#x89E3;&#x51B3; &#x4E5F;&#x6CA1;&#x4EBA;&#x89E3;&#x51B3;&#x8FC7;&#xFF0C;&#x4F60;&#x4F1A;&#x975E;&#x5E38;&#x96BE;&#x53D7;&#x3002;
&#x8FD8;&#x6709;&#x4E00;&#x4E9B;&#x65B0;&#x6280;&#x672F;&#x53EF;&#x80FD;&#x4F1A;&#x5F71;&#x54CD;&#x4F60;&#x7684;APP&#x4E0A;&#x67B6;&#x3002;

2&#x3001;&#x8BE5;&#x6280;&#x672F;&#x662F;&#x8C01;&#x53D1;&#x8D77;&#x548C;&#x4E3B;&#x6301;&#x7684;&#xFF0C;&#x6743;&#x5A01;&#x6027;&#x5982;&#x4F55;&#xFF0C;&#x540E;&#x7EED;&#x66F4;&#x65B0;&#x5982;&#x4F55;&#xFF0C;&#x662F;&#x5426;&#x6709;&#x7248;&#x6743;&#x98CE;&#x9669;&#x3002;
&#x53EF;&#x80FD;&#x4F1A;&#x6709;&#x4E00;&#x4E9B;&#x6280;&#x672F;&#x7CBE;&#x82F1;&#x4F1A;&#x5F00;&#x6E90;&#x4E00;&#x4E2A;&#x6846;&#x67B6;&#xFF0C;&#x4F46;&#x662F;&#x5E76;&#x6CA1;&#x6709;&#x5F62;&#x6210;&#x4E00;&#x4E2A;&#x597D;&#x7684;&#x793E;&#x533A;&#x6765;&#x7EF4;&#x62A4;&#xFF0C;&#x540E;&#x671F;&#x53EF;&#x80FD;&#x5BFC;&#x81F4;&#x9879;&#x76EE;&#x66F4;&#x65B0;&#x7F13;&#x6162;&#xFF0C;&#x751A;&#x81F3;&#x505C;&#x66F4;&#x3002;
&#x6709;&#x4E9B;&#x53EF;&#x80FD;&#x4F1A;&#x6162;&#x6162;&#x5730;&#x6F14;&#x5316;&#x6210;&#x5F00;&#x6E90;&#x7248;&#x548C;&#x6536;&#x8D39;&#x7248;&#xFF0C;&#x4F60;&#x60F3;&#x8981;&#x7684;&#x529F;&#x80FD;&#x53EA;&#x5728;&#x6536;&#x8D39;&#x7248;&#x4E2D;&#x63D0;&#x4F9B;&#x3002;&#x5F71;&#x54CD;&#x4F60;&#x7684;&#x9884;&#x7B97;&#x3002;

3&#x3001;&#x8BE5;&#x6280;&#x672F;&#x7684;&#x590D;&#x6742;&#x6027;&#x5982;&#x4F55;&#x3001;&#x5B66;&#x4E60;&#x6210;&#x672C; &#x3001;&#x4EE5;&#x540E;&#x66FF;&#x6362;&#x7684;&#x6210;&#x672C;&#x5982;&#x4F55;&#x3002;
&#x5728;&#x4E00;&#x4E9B;&#x5DE5;&#x671F;&#x6BD4;&#x8F83;&#x7D27;&#x7684;&#x9879;&#x76EE;&#x4E2D;&#xFF0C;&#x5982;&#x679C;&#x91C7;&#x7528;&#x65B0;&#x6280;&#x672F;&#xFF0C;&#x56E0;&#x4E3A;&#x56E2;&#x961F;&#x6210;&#x5458;&#x9700;&#x8981;&#x5B66;&#x4E60;&#x6210;&#x672C;&#xFF0C;&#x53EF;&#x80FD;&#x65E0;&#x6CD5;&#x628A;&#x63A7;&#x5F00;&#x53D1;&#x8FDB;&#x5EA6;&#x3002;

4&#x3001;&#x4F7F;&#x7528;&#x8BE5;&#x6280;&#x672F;&#x662F;&#x5426;&#x5E26;&#x6765;&#x8FC7;&#x591A;&#x7684;&#x5197;&#x4F59;&#x6A21;&#x5757;&#xFF0C;&#x5BF9;&#x7A0B;&#x5E8F;&#x7684;&#x5065;&#x58EE;&#x6027;&#x662F;&#x5426;&#x6709;&#x5F71;&#x54CD;&#x3002;
&#x4F8B;&#x5982;&#x4E00;&#x4E9B;&#x5DE5;&#x5177;&#x7C7B;&#x60F3;&#x505A;&#x5F97;&#x5927;&#x4E14;&#x5168;&#xFF0C;&#x4F46;&#x662F;&#x4F60;&#x5F15;&#x5165;&#x5B83;&#x53EA;&#x662F;&#x4E3A;&#x4E86;&#x4F7F;&#x7528;&#x5B83;&#x7684;&#x4E00;&#x4E2A;&#x5C0F;&#x6A21;&#x5757;&#xFF0C;&#x6B64;&#x65F6;&#x8981;&#x597D;&#x597D;&#x8003;&#x8651;&#x548C;&#x9A8C;&#x8BC1;&#x4E0B;&#x3002;
&#x5982;&#x679C;&#x51FA;&#x73B0; &#x4F9D;&#x8D56;&#x51B2;&#x7A81;&#x3001;&#x5B89;&#x88C5;&#x5305;&#x589E;&#x5927;&#x7B49;&#x95EE;&#x9898;&#xFF0C;&#x4F60;&#x53C8;&#x5BF9;&#x8BE5;&#x6280;&#x672F;&#x4E0D;&#x592A;&#x719F;&#x6089;&#xFF0C;&#x65E0;&#x6CD5;&#x8FDB;&#x884C;&#x4F18;&#x5316;&#x548C;&#x6392;&#x67E5;&#xFF0C;
&#x4F1A;&#x7ED9;&#x9879;&#x76EE;&#x5E26;&#x6765;&#x5F88;&#x591A;&#x4E0D;&#x7A33;&#x5B9A;&#x56E0;&#x7D20;&#x3002;

5&#x3001;&#x5BF9;&#x6280;&#x672F;&#x8FDB;&#x884C;&#x8003;&#x8651;&#x65F6;&#x4E0D;&#x4EC5;&#x4EC5;&#x8981;&#x770B;&#x5230;&#x5B83;&#x7684;&#x4F18;&#x70B9;&#xFF0C;&#x66F4;&#x8981;&#x770B;&#x5230;&#x5B83;&#x7684;&#x4E0D;&#x8DB3;&#x70B9;&#xFF0C;&#x6539;&#x6280;&#x672F;&#x5728;&#x5BA3;&#x4F20;&#x65F6;&#xFF0C;&#x5B83;&#x4E00;&#x822C;&#x662F;&#x5BF9;&#x7F3A;&#x70B9;&#x907F;&#x800C;&#x4E0D;&#x8C08;&#x7684;&#xFF0C;
&#x6240;&#x4EE5;&#x4F60;&#x8981;&#x7559;&#x5FC3;&#x5E76;&#x9A8C;&#x8BC1;&#x3002;
</code></pre>
<h2 id="&#x5BFC;&#x81F4;-&#x4EE3;&#x7801;&#x8D28;&#x91CF;&#x95EE;&#x9898;-&#x7684;&#x539F;&#x56E0;"><a name="&#x5BFC;&#x81F4;-&#x4EE3;&#x7801;&#x8D28;&#x91CF;&#x95EE;&#x9898;-&#x7684;&#x539F;&#x56E0;" class="anchor-navigation-ex-anchor" href="#&#x5BFC;&#x81F4;-&#x4EE3;&#x7801;&#x8D28;&#x91CF;&#x95EE;&#x9898;-&#x7684;&#x539F;&#x56E0;"><i class="fa fa-link" aria-hidden="true"></i></a>13.2. &#x5BFC;&#x81F4; &#x4EE3;&#x7801;&#x8D28;&#x91CF;&#x95EE;&#x9898; &#x7684;&#x539F;&#x56E0;</h2>
<pre><code class="lang-text">1&#x3001;&#x65B0;&#x624B; &#xFF0C;&#x7ECF;&#x9A8C;&#x548C;&#x80FD;&#x529B;&#x4E0D;&#x8DB3;
2&#x3001;&#x4EBA;&#x5458;&#x7684;&#x8C03;&#x52A8;&#x548C;&#x66F4;&#x6362;&#xFF0C;&#x5BFC;&#x81F4;&#x5BF9;&#x4E1A;&#x52A1;&#x7684;&#x7406;&#x89E3;&#x6709;&#x504F;&#x5DEE;
3&#x3001;&#x6CA1;&#x6709;&#x4E00;&#x4E2A;&#x7EA6;&#x5B9A;&#x7684; &#x4EE3;&#x7801;&#x89C4;&#x8303; &#xFF0C;&#x5BFC;&#x81F4;&#x6C9F;&#x901A;&#x548C;&#x7EF4;&#x62A4;&#x56F0;&#x96BE;
</code></pre>
<h2 id="&#x5982;&#x4F55;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x8D28;&#x91CF;"><a name="&#x5982;&#x4F55;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x8D28;&#x91CF;" class="anchor-navigation-ex-anchor" href="#&#x5982;&#x4F55;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x8D28;&#x91CF;"><i class="fa fa-link" aria-hidden="true"></i></a>13.3. &#x5982;&#x4F55;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x8D28;&#x91CF;</h2>
<pre><code class="lang-text">1&#x3001;&#x67B6;&#x6784;&#x5E08;&#x642D;&#x5EFA;&#x3001;&#x8BBE;&#x7F6E; &#x5408;&#x7406;&#x4F18;&#x79C0;&#x7684;&#x57FA;&#x7840;&#x6846;&#x67B6;&#x3002;
2&#x3001;&#x8981;&#x6C42; &#x5F00;&#x53D1;&#x8005; &#x5355;&#x5143;&#x6D4B;&#x8BD5;&#x3001;&#x4EE3;&#x7801;&#x81EA;&#x6D4B;&#x3002;bug&#x7387;&#x8DDF;&#x7EE9;&#x6548;&#x6302;&#x94A9;&#x3002;

3&#x3001;&#x4EE3;&#x7801; &#x8BC4;&#x5BA1;&#x3001;&#x590D;&#x67E5;&#x3001; review 
&#x4EE3;&#x7801;&#x63D0;&#x4EA4;&#x540E;&#xFF0C;&#x7531;&#x5176;&#x4ED6;&#x4EBA; &#x4E00;&#x822C;&#x662F;&#x6C34;&#x5E73;&#x66F4;&#x9AD8;&#x7684;&#x4EBA;&#x6765;&#x8BC4;&#x5BA1;&#x4EE3;&#x7801;&#xFF0C;
&#x8BC4;&#x5BA1;&#x70B9;&#x53EF;&#x4EE5;&#x653E;&#x5728; &#x4EE3;&#x7801;&#x662F;&#x5426;&#x7B26;&#x5408;&#x7EA6;&#x5B9A;&#x7684;&#x4EE3;&#x7801;&#x89C4;&#x8303;&#x3001; &#x8BBE;&#x8BA1;&#x601D;&#x8DEF;&#x548C;&#x903B;&#x8F91;&#x3001;&#x6027;&#x80FD; &#xFF0C;
&#x5FC5;&#x8981;&#x65F6;&#x8981;&#x8FDB;&#x884C;&#x91CD;&#x6784;&#xFF0C;&#x5B9E;&#x884C;&#x8001;&#x4EBA;&#x5E26;&#x52A8;&#x65B0;&#x4EBA;&#x6210;&#x957F; 
&#x4E00;&#x822C;&#x800C;&#x8A00;&#xFF0C; &#x91C7;&#x7528; &#x4EE5;&#x5C0F;&#x7EC4;&#x4E3A;&#x5355;&#x4F4D;&#xFF0C;&#x7EC4;&#x957F;&#x8D23;&#x4EFB;&#x5236;&#x7684;&#x4EE3;&#x7801;&#x590D;&#x67E5;&#x5F62;&#x5F0F;&#x3002;
&#x5C0F;&#x7EC4;&#x957F;&#x4E0D;&#x8981;&#x5206;&#x914D;&#x592A;&#x591A;&#x7684;&#x5F00;&#x53D1;&#x4EFB;&#x52A1;&#xFF0C;&#x800C;&#x662F;&#x4EE5;&#x6307;&#x5BFC;&#x8BBE;&#x8BA1;&#x3001;&#x8BC4;&#x5BA1;&#x4EE3;&#x7801;&#x4E3A;&#x4E3B;&#x3002;

4&#x3001;&#x5B9A;&#x671F;&#x5F00;&#x603B;&#x7ED3;&#x5927;&#x4F1A;&#xFF0C;&#x505A;&#x5206;&#x4EAB;&#xFF0C;&#x56E2;&#x961F;&#x6210;&#x5458;&#x80FD;&#x529B;&#x5171;&#x540C;&#x63D0;&#x9AD8;
</code></pre>
<h2 id="&#x5982;&#x4F55;-&#x63D0;&#x9AD8;-&#x7EBF;&#x4E0A;&#x4EE3;&#x7801;-&#x8D28;&#x91CF;"><a name="&#x5982;&#x4F55;-&#x63D0;&#x9AD8;-&#x7EBF;&#x4E0A;&#x4EE3;&#x7801;-&#x8D28;&#x91CF;" class="anchor-navigation-ex-anchor" href="#&#x5982;&#x4F55;-&#x63D0;&#x9AD8;-&#x7EBF;&#x4E0A;&#x4EE3;&#x7801;-&#x8D28;&#x91CF;"><i class="fa fa-link" aria-hidden="true"></i></a>13.4. &#x5982;&#x4F55; &#x63D0;&#x9AD8; &#x7EBF;&#x4E0A;&#x4EE3;&#x7801; &#x8D28;&#x91CF;</h2>
<pre><code class="lang-text">1&#x3001;&#x4E0A;&#x7EBF;&#x524D;&#x5148;&#x505A;&#x597D;&#x672C;&#x5730;&#x6D4B;&#x8BD5;&#xFF0C;&#x52A0;&#x5165; bugly&#x7B49;&#x83B7;&#x53D6;&#x5F02;&#x5E38;&#x4FE1;&#x606F;&#xFF0C;&#x4EE5;&#x4FBF;&#x6392;&#x67E5;&#x4FEE;&#x590D;
2&#x3001;&#x652F;&#x6301;&#x70ED;&#x66F4;&#x65B0; &#xFF0C;&#x65E0;&#x611F;&#x77E5;&#x4FEE;&#x590D;&#x5C0F;bug
3&#x3001;&#x5168;&#x5C40;&#x5F02;&#x5E38;&#x6355;&#x6349;&#xFF0C;&#x9632;&#x6B62;APP&#x5D29;&#x6E83;&#x3002;
</code></pre>
<h2 id="&#x5982;&#x4F55;&#x81EA;&#x5B9A;&#x4E49;-lint"><a name="&#x5982;&#x4F55;&#x81EA;&#x5B9A;&#x4E49;-lint" class="anchor-navigation-ex-anchor" href="#&#x5982;&#x4F55;&#x81EA;&#x5B9A;&#x4E49;-lint"><i class="fa fa-link" aria-hidden="true"></i></a>13.5. &#x5982;&#x4F55;&#x81EA;&#x5B9A;&#x4E49; Lint</h2>
<pre><code class="lang-text">Android Lint &#x662F; ADT 16 &#x5F15;&#x5165;&#x7684;&#x4E00;&#x4E2A;&#x4EE3;&#x7801;&#x626B;&#x63CF;&#x5DE5;&#x5177; &#xFF0C;
&#x901A;&#x8FC7;&#x5BF9;&#x4EE3;&#x7801;&#x8FDB;&#x884C;&#x9759;&#x6001;&#x5206;&#x6790;&#xFF0C;&#x53EF;&#x4EE5;&#x5E2E;&#x52A9;&#x5F00;&#x53D1;&#x8005;&#x53D1;&#x73B0;&#x4EE3;&#x7801;&#x8D28;&#x91CF;&#x95EE;&#x9898;&#x548C;&#x63D0;&#x51FA;&#x4E00;&#x4E9B;&#x6539;&#x8FDB;&#x5EFA;&#x8BAE;&#x3002;
Lint &#x5DF2;&#x7ECF;&#x88AB;&#x96C6;&#x6210;&#x5728; AS &#x4E2D;&#x3002;
&#x539F;&#x751F; Lint &#x6709;&#x65F6;&#x65E0;&#x6CD5;&#x6EE1;&#x8DB3;&#x81EA;&#x5DF1;&#x7684;&#x9700;&#x6C42;&#xFF0C;&#x4F8B;&#x5982;&#x56E2;&#x961F;&#x7684;&#x7F16;&#x7801;&#x89C4;&#x8303;&#x3002;&#x6240;&#x4EE5;&#x6709;&#x65F6;&#x9700;&#x8981;&#x8FDB;&#x884C;&#x81EA;&#x5B9A;&#x4E49; Lint &#x3002;

&#x81EA;&#x5B9A;&#x4E49;lint &#x7684;&#x65B9;&#x6848;&#x76EE;&#x524D;&#x4E3B;&#x8981;&#x6709;&#x4E24;&#x79CD;&#x3002;
1&#x3001;&#x7B2C;&#x4E00;&#x79CD;&#x5F53;&#x7136;&#x662F; &#x8C37;&#x6B4C;&#x5B98;&#x65B9;&#x7684;&#xFF0C;https://sites.google.com/a/android.com/tools/tips/lint-custom-rules 
&#x4E0D;&#x8FC7;&#x8FD9;&#x79CD;&#x65B9;&#x6848;&#x6709;&#x70B9;&#x4E0D;&#x59A5;&#xFF0C;&#x8FD9;&#x79CD;&#x65B9;&#x6848;&#x914D;&#x7F6E;&#x7684; lint &#x89C4;&#x5219;&#x4F1A; &#x5F71;&#x54CD;&#x673A;&#x5668;&#x4E0A;&#x6240;&#x6709;&#x7684;Android&#x5DE5;&#x7A0B;&#x3002;
&#x62F7;&#x8D1D;&#x5230;&#x4E86; .android/lint &#x6587;&#x4EF6;&#x5939;&#x4E0B;&#x4E86;&#x3002;&#x6240;&#x4EE5;&#x4E00;&#x822C;&#x91C7;&#x7528;&#x7B2C;&#x4E8C;&#x79CD;&#x65B9;&#x6848;&#x3002;

2&#x3001;&#x7B2C;&#x4E8C;&#x79CD;&#x65B9;&#x6848;&#x662F; LinkedIn (&#x5C31;&#x662F;&#x90A3;&#x4E2A;&#x9886;&#x82F1;) &#x7684;&#xFF0C;https://engineering.linkedin.com/android/writing-custom-lint-checks-gradle
&#x5C06;lint.jar&#x653E;&#x5230;&#x4E00;&#x4E2A; aar &#x4E2D;&#x3002;&#x5C06;&#x9700;&#x8981; lint &#x68C0;&#x6D4B;&#x7684;&#x9879;&#x76EE;&#x4E2D;&#x5F15;&#x5165;&#x8FD9;&#x4E2A; aar&#xFF0C;&#x4EC5;&#x5BF9;&#x5F53;&#x524D;&#x5DE5;&#x7A0B;&#x6709;&#x6548;&#x3002;
</code></pre>
<h3 id="demo--linkedin-&#x65B9;&#x6848;"><a name="demo--linkedin-&#x65B9;&#x6848;" class="anchor-navigation-ex-anchor" href="#demo--linkedin-&#x65B9;&#x6848;"><i class="fa fa-link" aria-hidden="true"></i></a>13.5.1. demo ( LinkedIn &#x65B9;&#x6848;)</h3>
<pre><code class="lang-text">&#x53C2;&#x8003;&#x535A;&#x5BA2;&#x5199;&#x7684;demo &#xFF0C;&#x4EE5; aar&#x65B9;&#x5F0F;&#x5F15;&#x7528;&#x51FA;&#x4E86;&#x70B9;&#x95EE;&#x9898;&#x3002;(&#x53EA;&#x751F;&#x6548;&#x4E00;&#x6B21;&#xFF0C;&#x6682;&#x65F6;&#x4E0D;&#x77E5;&#x9053;&#x539F;&#x56E0;)
&#x6682;&#x65F6;&#x53EA;&#x7528; java lib &#x7684;&#x65B9;&#x5F0F; &#x5F15;&#x7528;&#x3002;
&#x5177;&#x4F53;&#x7684;&#x4F7F;&#x7528;&#x8BF7;&#x53C2;&#x8003;&#x4EE3;&#x7801; https://gitee.com/hnyer/aivin_lint_demo 

&#x76EE;&#x524D;&#x6709;&#x7684;&#x6548;&#x679C;&#x6709; 
&#x679A;&#x4E3E;&#x68C0;&#x6D4B;&#x3001;&#x56FE;&#x7247;&#x5927;&#x5C0F;&#x68C0;&#x6D4B;&#x3001;&#x7CFB;&#x7EDF;&#x65E5;&#x5FD7;&#x68C0;&#x6D4B;&#x3001;&#x547D;&#x540D;&#x89C4;&#x8303;&#x68C0;&#x6D4B;&#x3001;xml &#x5B57;&#x6BB5;&#x540D;&#x547D;&#x540D;&#x68C0;&#x6D4B;
&#x624B;&#x52A8;&#x521B;&#x5EFA;&#x7EBF;&#x7A0B;&#x68C0;&#x6D4B;&#x3001;&#x7CFB;&#x7EDF;&#x5410;&#x53F8;&#x68C0;&#x6D4B;&#x3001;xml&#x786C;&#x7F16;&#x7801;&#x68C0;&#x6D4B;&#x3001;&#x4EE3;&#x7801;&#x4E2D;&#x786C;&#x7F16;&#x7801;&#x68C0;&#x6D4B;
</code></pre>
<p><img src="../pics/&#x81EA;&#x5B9A;&#x4E49;lint.png" alt=""> </p>
<footer class="page-footer"><span class="copyright">( no Copyright&#xFF0C;enjoy youself ! ) all right reserved&#xFF0C;powered by Gitbook</span><span class="footer-modification">The file was updated at :
2022-04-04 10:49:02
</span></footer>
                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="sdk开发.html" class="navigation navigation-prev " aria-label="Previous page: sdk开发">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
                <a href="项目参数配置.html" class="navigation navigation-next " aria-label="Next page: 项目参数配置">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"APP优化","level":"1.12.29","depth":2,"next":{"title":"项目参数配置","level":"1.12.30","depth":2,"path":"chinese/android基础/项目参数配置.md","ref":"chinese/android基础/项目参数配置.md","articles":[]},"previous":{"title":"sdk开发","level":"1.12.28","depth":2,"path":"chinese/android基础/sdk开发.md","ref":"chinese/android基础/sdk开发.md","articles":[]},"dir":"ltr"},"config":{"plugins":["-search","search-plus","todo","anchor-navigation-ex","copy-code-button","fontsettings","tbfed-pagefooter","local-video","splitter","expandable-chapters","favicon","theme-comscore","local-video"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"( no Copyright，enjoy youself ! )","modify_label":"The file was updated at :","modify_format":"YYYY-MM-DD HH:mm:ss"},"todo":{},"splitter":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"family":"sans","size":2,"theme":"white"},"highlight":{},"anchor-navigation-ex":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":true},"favicon":{"shortcut":"assets/images/favicon.ico","bookmark":"assets/images/favicon.ico"},"theme-comscore":{},"local-video":{},"copy-code-button":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"expandable-chapters":{},"search-plus":{}},"theme":"default","author":"Aivin","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Aivin开发笔记","language":"zh-hans","gitbook":"*","description":"Aivin开发笔记"},"file":{"path":"chinese/android基础/APP优化.md","mtime":"2022-04-04T02:49:02.744Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-04-04T03:47:09.782Z"},"basePath":"../..","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="../../gitbook/gitbook.js"></script>
    <script src="../../gitbook/theme.js"></script>
    
        
        <script src="../../gitbook/gitbook-plugin-search-plus/jquery.mark.min.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-search-plus/search.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-copy-code-button/toggle.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-local-video/video.min.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-splitter/splitter.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-sharing/buttons.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-theme-comscore/test.js"></script>
        
    

    </body>
</html>

